analyze_adherence
Analyze how consistently you wear your Oura ring. Shows daily non-wear time, identifies gaps in data, and calculates adherence percentage. Useful for understanding data quality.
Ask questions about your own Oura Ring data — sleep, readiness, HRV, activity — and get an answer rather than raw JSON.
LABSCO SUMMARY
The statistics are what set it apart from a thin API wrapper: correlations come back with a p-value and sample size, comparisons with percentage change, anomalies flagged by IQR and Z-score. Start with the Personal Access Token — one variable, no callback URL — and move to OAuth only when you want tokens refreshed automatically.
An MCP server over the Oura API that formats what it fetches and adds statistics on top: correlations, anomaly detection, period comparisons and trend analysis.
An Oura account and Node >=18. Two ways to authorize: a Personal Access Token from cloud.ouraring.com in OURA_ACCESS_TOKEN, or the OAuth route — set OURA_CLIENT_ID and OURA_CLIENT_SECRET, run npx oura-ring-mcp auth, and the credentials are written to ~/.oura-mcp/credentials.json. It runs over stdio via npx oura-ring-mcp; the repository also documents a hosted HTTP deployment where each user authorizes with Oura directly.
One command plus a key — npm install -g oura-ring-mcp, then supply credentials
USE CASES
Read today's readiness score with its contributors, alongside last night's sleep.
Split a metric by the tag — alcohol, caffeine, meditation — and see what predicts your good nights.
Put two date ranges side by side and read the percentage change per metric.
Flag the unusual readings around it, then read the night's detail and whatever you had tagged.
Follow the HRV trend with rolling averages and line it up against the workouts you logged.
Correlate them over a chosen window and see whether the relationship is significant.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
analyze_adherenceAnalyze how consistently you wear your Oura ring. Shows daily non-wear time, identifies gaps in data, and calculates adherence percentage. Useful for understanding data quality.
analyze_hrv_trendAnalyze your HRV (Heart Rate Variability) trend over time. HRV is a key indicator of recovery and stress. Shows trend direction, rolling averages, and identifies recovery patterns.
analyze_sleep_qualityComprehensive sleep quality analysis over a time period. Shows trends, patterns by day of week, sleep debt, regularity score, and identifies your best/worst sleep days. Great for understanding what affects your sleep.
analyze_temperatureAnalyze body temperature patterns from readiness data. Temperature deviations can indicate illness, menstrual cycle phases, or environmental factors. Shows trends and flags unusual readings.
best_sleep_conditionsAnalyze what conditions are associated with your best sleep nights. Looks at activity levels, workouts, meditation sessions, tags, and day-of-week patterns to identify what predicts good vs poor sleep.
compare_conditionsCompare a health metric across different conditions. Supports manual tags (alcohol, caffeine) AND auto-tracked conditions: 'workout' (workout days vs rest days), 'high_activity' (high step days), 'meditation' (session days).
compare_periodsCompare health metrics between two time periods. Great for answering questions like 'How did I sleep this week vs last week?' or 'Was my HRV better last month?'. Returns side-by-side comparison with percentage changes.
correlate_metricsFind correlations between two health metrics. For example, see if your HRV correlates with sleep duration, or if activity affects your readiness. Returns correlation strength, direction, and statistical significance.
detect_anomaliesDetect unusual readings in your health data over a time period. Uses statistical methods (IQR and Z-score) to flag outliers in sleep, HRV, heart rate, and activity. Useful for identifying nights with unusually poor sleep, stress spikes, or other anomalies.
get_activityGet daily activity data including steps, calories, and activity breakdown (high/medium/low intensity). Use this to analyze movement and exercise patterns.
get_cardiovascular_ageGet your estimated cardiovascular (vascular) age based on heart health metrics. Compare your vascular age to your actual age to understand your cardiovascular health.
get_daily_sleepGet daily sleep scores and contributors (efficiency, deep sleep, REM sleep, latency, timing, etc.). Different from get_sleep - this provides a single daily score with breakdown of what contributed to it. Use this for understanding sleep quality scoring.
get_enhanced_tagsGet enhanced tags with rich data including custom tags, timestamps, and durations. Enhanced tags include predefined categories (sleep_aid, caffeine, alcohol, etc.) and custom user-created tags with names like medications, supplements, or lifestyle factors.
get_heart_rateGet individual heart rate readings throughout the day with timestamps and source (awake, rest, sleep, workout, etc.). Returns detailed time-series data. Use this for analyzing heart rate patterns, variability throughout the day, or correlating HR with activities.
get_personal_infoGet your Oura profile information including age, weight, height, and biological sex. This data is used by Oura to personalize insights.
get_readinessGet daily readiness scores and contributors (HRV balance, resting heart rate, body temperature, recovery). Use this to understand recovery and readiness to perform.
get_resilienceGet daily resilience scores showing your body's capacity to recover from stress. Includes sleep recovery, daytime recovery, and stress contributors. Resilience levels range from limited to exceptional.
get_rest_modeGet rest mode periods when you've enabled rest mode in the Oura app (typically during illness or recovery). Shows when rest mode was active and any notes.
get_ring_infoGet information about your Oura ring hardware including model, color, firmware version, and configuration.
get_sessionsGet meditation, breathing, and relaxation sessions recorded with Oura. Includes session type, duration, and biometrics like heart rate and HRV during the session.
get_sleepGet detailed sleep data for a date range. Returns sleep duration, stages (deep/REM/light), efficiency, heart rate, and HRV. Use this for analyzing sleep patterns and quality.
get_sleep_timeGet Oura's personalized bedtime recommendations. Shows your ideal bedtime window based on your sleep patterns and circadian rhythm.
get_spo2Get daily SpO2 (blood oxygen saturation) percentage and breathing disturbance index. Use this to monitor respiratory health, detect sleep apnea patterns, or understand overnight oxygen levels.
get_stressGet daily stress levels and recovery time. Shows time spent in high stress vs high recovery zones, plus overall day summary (restored/normal/stressful). Use this to understand stress patterns and recovery balance.
get_tagsGet user-created tags and notes. Tags help track lifestyle factors like caffeine, alcohol, meals, or custom notes that may affect sleep and recovery.
get_vo2_maxGet VO2 max measurements (cardiorespiratory fitness). VO2 max indicates the maximum amount of oxygen your body can use during intense exercise. Higher values indicate better cardiovascular fitness. Use this to track fitness improvements over time.
get_workoutsGet workout sessions with activity type, duration, intensity, calories burned, and distance. Use this to analyze exercise patterns, workout frequency, and training load.
BEFORE YOU INSTALL
27 tools when we connected. The documentation's tables list 17; ten more, such as get_vo2_max and get_resilience, are available but undocumented.
CONTEXT COST
Rated by the size of the 27 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npm install -g oura-ring-mcp{
"mcpServers": {
"oura": {
"command": "npx",
"args": [
"oura-ring-mcp"
],
"env": {
"OURA_ACCESS_TOKEN": "<YOUR_OURA_ACCESS_TOKEN>"
}
}
}
}Create an Oura OAuth application at https://cloud.ouraring.com/oauth/applications, set its Redirect URI to https://<YOUR_APP>.railway.app/oauth/callback, and note the Client ID and Client Secret
git clone https://github.com/mitchhankins01/oura-ring-mcp.git
cd oura-ring-mcp
npm install -g @railway/cli
railway login
railway init
railway upIn the Railway dashboard, add OURA_CLIENT_ID and OURA_CLIENT_SECRET from your Oura OAuth app, and NODE_ENV set to production
In Claude.ai, go to Settings > MCP Connectors > Add and enter your server URL: https://<YOUR_APP>.railway.app (without /mcp)
Leave OAuth Client ID and Secret empty; you will be redirected to Oura to authorize access to your data