Skip to main content
Glama
oura-mcp-server-enhanced

oura-mcp-server-enhanced

by josuhr

Oura MCP Server (Enhanced)

An MCP (Model Context Protocol) server that provides comprehensive access to the Oura Ring API v2. Exposes 17 tools covering sleep, activity, heart rate, stress, SpO2, workouts, and more.

Built with FastMCP and httpx.

Tools

Sleep & Recovery

Tool

Description

get_sleep_data

Detailed sleep sessions -- stages, heart rate, HRV, breathing rate

get_daily_sleep

Daily sleep scores and contributor breakdown

get_sleep_time

Recommended and actual sleep timing windows

get_daily_readiness

Readiness scores and contributors (HRV balance, body temp, etc.)

get_daily_resilience

Recovery capacity and stress tolerance indicators

Activity & Fitness

Tool

Description

get_daily_activity

Steps, calories, active time breakdown, MET levels

get_workouts

Workout sessions with type, calories, distance, duration

get_sessions

Guided sessions (meditation, breathing) with biometrics

get_vo2_max

VO2 max cardiovascular fitness estimates

Health Vitals

Tool

Description

get_heart_rate

Heart rate at 5-minute intervals (uses datetime params)

get_daily_spo2

Daily blood oxygen saturation

get_daily_stress

Daily stress levels and recovery summary

get_daily_cardiovascular_age

Estimated cardiovascular age

User & Device

Tool

Description

get_personal_info

User profile (age, weight, height)

get_ring_configuration

Ring model, color, firmware, setup date

get_rest_mode

Rest mode periods and schedules

get_tags

User-created lifestyle tags and annotations

All tools with date parameters accept optional start_date and end_date in YYYY-MM-DD format. When omitted, the Oura API defaults to recent data.

Related MCP server: Oura MCP Server (Python)

Setup

  1. Download the latest oura-mcp-server-enhanced.mcpb from Releases

  2. In Claude Desktop, go to Settings > Extensions > Advanced Settings and enable Install from file

  3. Back on the Extensions page, click Add from file and select the downloaded .mcpb file

  4. Enter your Oura API Token when prompted

Option B: Manual Setup

1. Get an Oura API Token

Go to Oura Personal Access Tokens and create a new token.

2. Install

Requires Python 3.12+ and uv.

git clone https://github.com/josuhr/oura-mcp-server-enhanced.git
cd oura-mcp-server-enhanced
uv venv && uv pip install -e .

3. Configure Claude Desktop

Add the following to your claude_desktop_config.json:

{
  "mcpServers": {
    "oura": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/oura-mcp-server-enhanced", "oura-mcp-server"],
      "env": {
        "OURA_API_TOKEN": "your_token_here"
      }
    }
  }
}

Replace /path/to/oura-mcp-server-enhanced with the actual path and your_token_here with your Oura API token.

4. Run Standalone (optional)

export OURA_API_TOKEN="your_token_here"
oura-mcp-server

Building the Extension

To build the .mcpb extension bundle from source:

zip -r oura-mcp-server-enhanced.mcpb manifest.json pyproject.toml uv.lock src/ .python-version -x "src/**/__pycache__/*"

Project Structure

src/oura_mcp_server/
├── __init__.py       # Package entry point
├── server.py         # FastMCP tool definitions and main()
├── client.py         # Async HTTP client for Oura API v2
└── transforms.py     # Human-readable data formatting

Credits

Inspired by tomekkorbak/oura-mcp-server, extended to cover the full Oura API v2.

Available Tools

17 tools
get_daily_activityA

Get daily activity data including steps, calories, active time breakdown, and MET levels.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_daily_cardiovascular_ageB

Get estimated cardiovascular age based on resting heart rate and HRV trends.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_daily_readinessA

Get readiness scores and contributors (activity balance, body temperature, HRV balance, resting heart rate, sleep balance).

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_daily_resilienceA

Get resilience data indicating recovery capacity and stress tolerance.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_daily_sleepB

Get daily sleep scores and contributor breakdown (deep sleep, efficiency, latency, REM, restfulness, timing).

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_daily_spo2A

Get daily blood oxygen (SpO2) saturation readings.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_daily_stressA

Get daily stress levels including stress high, recovery high, and day summary.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_heart_rateA

Get heart rate data at 5-minute intervals throughout the day and night.

Args:
    start_datetime: Start datetime in YYYY-MM-DDTHH:MM:SS format. Defaults to ~24 hours ago.
    end_datetime: End datetime in YYYY-MM-DDTHH:MM:SS format. Defaults to now.

Inputs: end_datetime, start_datetime. Returns: result

get_personal_infoA

Get user profile information including age, weight, height, and biological sex.

Inputs: no named parameters. Returns: result

get_rest_modeA

Get rest mode periods and their scheduled episodes.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_ring_configurationA

Get ring hardware details including model, color, firmware version, and setup date.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_sessionsA

Get guided and unguided session data (meditation, breathing, etc.) with heart rate and HRV biometrics.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_sleep_dataA

Get detailed sleep session data including sleep stages, heart rate, HRV, and breathing rate.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_sleep_timeB

Get recommended and actual sleep timing windows.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_tagsA

Get user-created tags and lifestyle annotations (e.g. caffeine, alcohol, exercise notes).

Returns enhanced tags when available, falling back to standard tags.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_vo2_maxB

Get VO2 max estimates indicating cardiovascular fitness level.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

get_workoutsB

Get workout sessions with activity type, calories burned, distance, intensity, and duration.

Args:
    start_date: Start date in YYYY-MM-DD format. Defaults to yesterday.
    end_date: End date in YYYY-MM-DD format. Defaults to today.

Inputs: end_date, start_date. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 17 tools

    Disambiguation5/5

    Each tool targets a distinct metric (e.g., activity, readiness, sleep stages, heart rate) with clear descriptions, so an agent can reliably distinguish between them even when dealing with similar domains like sleep.

    Naming Consistency4/5

    All tools follow a 'get_noun' pattern in snake_case, but there is minor inconsistency with the 'daily_' prefix (some tools use it, others don't) and the absence of a verb beyond 'get' makes the naming straightforward yet slightly varied.

    Tool Count4/5

    17 tools is slightly above the typical well-scoped range (3-15), but each tool covers a necessary Oura metric without redundancy, making the count reasonable for a comprehensive health API.

    Completeness5/5

    The tool set covers nearly all major Oura data types (activity, sleep, readiness, heart rate, stress, tags, sessions, workouts, etc.) with no obvious missing CRUD operations or critical gaps.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers