Skip to main content
Glama
tomekkorbak

Oura MCP Server

by tomekkorbak
README.md
# Oura MCP Server

![Python Package](https://github.com/tomekkorbak/oura-mcp-server/workflows/Python%20Package/badge.svg)
[![PyPI version](https://badge.fury.io/py/oura-mcp-server.svg)](https://badge.fury.io/py/oura-mcp-server)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3120/)

A [Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) server that provides access to the Oura API. It allows language models to query sleep, readiness, and resilience data from Oura API.

## Available Tools

The server exposes the following tools:

### Date Range Queries

- `get_sleep_data(start_date: str, end_date: str)`: Get sleep data for a specific date range
- `get_readiness_data(start_date: str, end_date: str)`: Get readiness data for a specific date range
- `get_resilience_data(start_date: str, end_date: str)`: Get resilience data for a specific date range

Dates should be provided in ISO format (`YYYY-MM-DD`).

### Today's Data Queries

- `get_today_sleep_data()`: Get sleep data for today
- `get_today_readiness_data()`: Get readiness data for today
- `get_today_resilience_data()`: Get resilience data for today

## Usage

You'll need an Oura API token to use this server. You can obtain one by:

1. Going to the [Oura Developer Portal](https://cloud.ouraring.com/v2/docs)
2. Creating a Personal Access Token

### Claude for Desktop

Update your `claude_desktop_config.json` (located in `~/Library/Application\ Support/Claude/claude_desktop_config.json` on macOS and `%APPDATA%/Claude/claude_desktop_config.json` on Windows) to include the following:

```json
{
    "mcpServers": {
        "oura": {
            "command": "uvx",
            "args": [
                "oura-mcp-server"
            ],
            "env": {
                "OURA_API_TOKEN": "YOUR_OURA_API_TOKEN"
            }
        }
    }
}
```


## Example Queries

Once connected, you can ask Claude questions like:

- "What's my sleep score for today?"
- "Show me my readiness data for the past week"
- "How was my sleep from January 1st to January 7th?"
- "What's my resilience score today?"

## Error Handling

The server provides human-readable error messages for common issues:

- Invalid date formats
- API authentication errors
- Network connectivity problems

## License

This project is licensed under the MIT License - see the LICENSE file for details.

TDQS

B3.2/5.0

Scored across 6 tools

Disambiguation3/5

The tools have clear distinctions between readiness, resilience, and sleep data types, but there is significant overlap between the 'get_X_data' and 'get_today_X_data' pairs. An agent might confuse which tool to use for today's data versus a date range, though the descriptions clarify the difference.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with 'get_' prefix and descriptive suffixes (e.g., 'get_readiness_data', 'get_today_sleep_data'). The naming is predictable and uniform across all six tools.

Tool Count4/5

Six tools are reasonable for a health/fitness data server, covering three data types with both date-range and today-specific variants. It's slightly over-scoped as the 'today' tools could be handled by the date-range tools with default parameters, but it's still well within an appropriate range.

Completeness3/5

The server provides read-only access to readiness, resilience, and sleep data, which aligns with Oura's typical API capabilities. However, there are notable gaps: no tools for writing or updating data (e.g., setting goals or annotations), and no coverage of other Oura metrics like activity or heart rate, limiting the surface for comprehensive health tracking.

Maintenance

ActivityInactive
ResponsivenessUnresponsive