Connects your Oura Ring health data directly to Claude through the Oura API. You get tools for querying sleep stages, readiness scores, activity metrics, heart rate, HRV, and SpO2 readings with formatted output instead of raw JSON. It includes smart analysis tools like anomaly detection, metric correlation, and condition comparison using your Oura tags. Supports both personal access tokens and OAuth flow with automatic refresh. The interesting part is the analysis layer: ask it to find what predicts your best sleep nights or compare recovery patterns across different conditions. Also deploys as an SSE server on Railway if you want remote access through Claude.ai instead of local stdio.
Public tool metadata for what this MCP can expose to an agent.
personal_info.listSingle Personal Info DocumentSingle Personal Info Document
No parameter schema in public metadata yet.
tag.listMultiple Tag Documents3 paramsMultiple Tag Documents
end_datevaluenext_tokenvaluestart_datevalueenhanced_tag.listMultiple Enhanced Tag Documents3 paramsMultiple Enhanced Tag Documents
end_datevaluenext_tokenvaluestart_datevalueworkout.listMultiple Workout Documents3 paramsMultiple Workout Documents
end_datevaluenext_tokenvaluestart_datevaluesession.listMultiple Session Documents3 paramsMultiple Session Documents
end_datevaluenext_tokenvaluestart_datevaluedaily_activity.listMultiple Daily Activity Documents3 paramsMultiple Daily Activity Documents
end_datevaluenext_tokenvaluestart_datevaluedaily_sleep.listMultiple Daily Sleep Documents3 paramsMultiple Daily Sleep Documents
end_datevaluenext_tokenvaluestart_datevaluedaily_spo2.listMultiple Daily Spo2 Documents3 paramsMultiple Daily Spo2 Documents
end_datevaluenext_tokenvaluestart_datevaluedaily_readiness.listMultiple Daily Readiness Documents3 paramsMultiple Daily Readiness Documents
end_datevaluenext_tokenvaluestart_datevaluesleep.listMultiple Sleep Documents3 paramsMultiple Sleep Documents
end_datevaluenext_tokenvaluestart_datevaluesleep_time.listMultiple Sleep Time Documents3 paramsMultiple Sleep Time Documents
end_datevaluenext_tokenvaluestart_datevaluerest_mode_period.listMultiple Rest Mode Period Documents3 paramsMultiple Rest Mode Period Documents
end_datevaluenext_tokenvaluestart_datevaluering_configuration.listMultiple Ring Configuration Documents1 paramsMultiple Ring Configuration Documents
next_tokenvaluedaily_stress.listMultiple Daily Stress Documents3 paramsMultiple Daily Stress Documents
end_datevaluenext_tokenvaluestart_datevaluedaily_resilience.listMultiple Daily Resilience Documents3 paramsMultiple Daily Resilience Documents
end_datevaluenext_tokenvaluestart_datevaluedaily_cardiovascular_age.listMultiple Daily Cardiovascular Age Documents3 paramsMultiple Daily Cardiovascular Age Documents
end_datevaluenext_tokenvaluestart_datevaluev_o2_max.listMultiple Vo2 Max Documents3 paramsMultiple Vo2 Max Documents
end_datevaluenext_tokenvaluestart_datevaluetag.getSingle Tag Document1 paramsSingle Tag Document
document_idstringenhanced_tag.getSingle Enhanced Tag Document1 paramsSingle Enhanced Tag Document
document_idstringworkout.getSingle Workout Document1 paramsSingle Workout Document
document_idstringsession.getSingle Session Document1 paramsSingle Session Document
document_idstringdaily_activity.getSingle Daily Activity Document1 paramsSingle Daily Activity Document
document_idstringdaily_sleep.getSingle Daily Sleep Document1 paramsSingle Daily Sleep Document
document_idstringdaily_spo2.getSingle Daily Spo2 Document1 paramsSingle Daily Spo2 Document
document_idstringdaily_readiness.getSingle Daily Readiness Document1 paramsSingle Daily Readiness Document
document_idstringsleep.getSingle Sleep Document1 paramsSingle Sleep Document
document_idstringsleep_time.getSingle Sleep Time Document1 paramsSingle Sleep Time Document
document_idstringrest_mode_period.getSingle Rest Mode Period Document1 paramsSingle Rest Mode Period Document
document_idstringring_configuration.getSingle Ring Configuration Document1 paramsSingle Ring Configuration Document
document_idstringdaily_stress.getSingle Daily Stress Document1 paramsSingle Daily Stress Document
document_idstringdaily_resilience.getSingle Daily Resilience Document1 paramsSingle Daily Resilience Document
document_idstringdaily_cardiovascular_age.getSingle Daily Cardiovascular Age Document1 paramsSingle Daily Cardiovascular Age Document
document_idstringv_o2_max.getSingle Vo2 Max Document1 paramsSingle Vo2 Max Document
document_idstringwebhook.subscription.listList Webhook SubscriptionsList Webhook Subscriptions
No parameter schema in public metadata yet.
webhook.subscription.createCreate Webhook Subscription4 paramsCreate Webhook Subscription
data_typestringtag · enhanced_tag · workout · session · sleep · daily_sleepevent_typestringcreate · update · deletecallback_urlstringverification_tokenstringwebhook.subscription.getGet Webhook Subscription1 paramsGet Webhook Subscription
idstringwebhook.subscription.updateUpdate Webhook Subscription5 paramsUpdate Webhook Subscription
idstringdata_typevalueevent_typevaluecallback_urlvalueverification_tokenstringwebhook.subscription.deleteDelete Webhook Subscription1 paramsDelete Webhook Subscription
idstringwebhook.subscription.renew.updateRenew Webhook Subscription1 paramsRenew Webhook Subscription
idstringheartrate.listMultiple Heart Rate Documents3 paramsMultiple Heart Rate Documents
next_tokenvalueend_datetimevaluestart_datetimevalueAn MCP server that connects your Oura Ring to Claude and other AI assistants. Get human-readable insights about your sleep, readiness, and activity—not just raw JSON.
See example outputs — what Claude returns for sleep, readiness, weekly summaries, and smart analysis
npm install -g oura-ring-mcp
Or use directly with npx (no install needed):
npx oura-ring-mcp
Option A: Personal Access Token (simpler)
OURA_ACCESS_TOKEN in your Claude Desktop config (see below)Option B: OAuth CLI Flow
http://localhost:3000/callbackexport OURA_CLIENT_ID=your_client_id
export OURA_CLIENT_SECRET=your_client_secret
npx oura-ring-mcp auth
~/.oura-mcp/credentials.jsonAdd to claude_desktop_config.json:
With Personal Access Token:
{
"mcpServers": {
"oura": {
"command": "npx",
"args": ["oura-ring-mcp"],
"env": {
"OURA_ACCESS_TOKEN": "your_token_here"
}
}
}
}
With OAuth (after running npx oura-ring-mcp auth):
{
"mcpServers": {
"oura": {
"command": "npx",
"args": ["oura-ring-mcp"]
}
}
}
The server reads credentials from ~/.oura-mcp/credentials.json. To enable automatic token refresh, add your OAuth credentials:
{
"mcpServers": {
"oura": {
"command": "npx",
"args": ["oura-ring-mcp"],
"env": {
"OURA_CLIENT_ID": "your_client_id",
"OURA_CLIENT_SECRET": "your_client_secret"
}
}
}
}
Restart Claude Desktop. Requires Node >=18.
Daily check-ins:
Patterns & trends:
Correlations & insights:
Comparisons:
Anomalies:
| Tool | Description |
|---|---|
get_sleep | Sleep data with stages, efficiency, HR, HRV |
get_daily_sleep | Daily sleep scores with contributors |
get_readiness | Readiness scores and recovery metrics |
get_activity | Steps, calories, intensity breakdown |
get_workouts | Workout sessions with type and intensity |
get_sessions | Meditation and relaxation sessions |
get_heart_rate | HR readings throughout the day |
get_stress | Stress levels and recovery time |
get_spo2 | Blood oxygen and breathing disturbance |
get_tags | User-created tags and notes |
| Tool | Description |
|---|---|
detect_anomalies | Find unusual readings using outlier detection |
analyze_sleep_quality | Sleep analysis with trends, patterns, debt |
correlate_metrics | Find correlations between health metrics |
compare_periods | Compare this week vs last week |
compare_conditions | Compare metrics with/without a tag |
best_sleep_conditions | What predicts your good vs poor sleep |
analyze_hrv_trend | HRV trend with rolling averages |
| Resource | Description |
|---|---|
oura://today | Today's health summary |
oura://weekly-summary | Last 7 days with averages |
oura://baseline | Your 30-day averages and normal ranges |
oura://monthly-insights | 30-day analysis with trends and anomalies |
oura://tag-summary | Your tags and usage frequency |
| Prompt | Description |
|---|---|
weekly-review | Comprehensive weekly health review |
sleep-optimization | Identify what leads to your best sleep |
recovery-check | Should you train hard or rest today? |
compare-weeks | This week vs last week comparison |
tag-analysis | How a specific tag affects your health |
Deploy the MCP server for remote access. The server proxies OAuth through Oura, so users authenticate directly with their Oura account — no PAT needed.
https://your-app.railway.app/oauth/callback# Install Railway CLI
npm install -g @railway/cli
# Login, init, and deploy
railway login
railway init
railway up
In the Railway dashboard, add:
| Variable | Description |
|---|---|
OURA_CLIENT_ID | From your Oura OAuth app |
OURA_CLIENT_SECRET | From your Oura OAuth app |
NODE_ENV | production |
MCP_SECRET | (Optional) Static bearer token for Claude Desktop (openssl rand -base64 32) |
OURA_ACCESS_TOKEN | (Optional) PAT fallback if not using OAuth (MCP_SECRET required) |
Railway automatically sets PORT and RAILWAY_PUBLIC_DOMAIN.
Use the connector in Claude.ai:
https://your-app.railway.app (without /mcp)For Claude Desktop, use MCP_SECRET + OURA_ACCESS_TOKEN:
{
"mcpServers": {
"oura-remote": {
"url": "https://your-app.railway.app/mcp",
"headers": {
"Authorization": "Bearer your_mcp_secret_here"
}
}
}
}
# With Oura OAuth (full flow)
OURA_CLIENT_ID=your_id OURA_CLIENT_SECRET=your_secret pnpm start:http
# With static secret only (requires OURA_ACCESS_TOKEN)
OURA_ACCESS_TOKEN=your_pat MCP_SECRET=test-secret pnpm start:http
# Verify health endpoint
curl http://localhost:3000/health
# Check OAuth metadata (only available when OURA_CLIENT_ID is set)
curl http://localhost:3000/.well-known/oauth-authorization-server
# Test authenticated request (with static secret)
curl -X POST http://localhost:3000/mcp \
-H "Authorization: Bearer test-secret" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{}},"id":1}'
See CLAUDE.md for architecture details and development guidelines.
MIT
OURA_ACCESS_TOKENsecretOura Personal Access Token (get from cloud.ouraring.com/personal-access-tokens)
OURA_CLIENT_IDOAuth Client ID (alternative to access token, from developer.ouraring.com)
OURA_CLIENT_SECRETsecretOAuth Client Secret (required with OURA_CLIENT_ID)