Skip to main content
Glama

@louis030195/oura-mcp

Dead simple MCP (Model Context Protocol) server for Oura Ring. Get your sleep, readiness, and activity data directly from Claude, ChatGPT, or any LLM that supports MCP.


πŸ’– Support This Project

If you find this MCP server useful, please consider supporting its development!

Support via Stripe

πŸ‘‰ Click here to support this project

Your support helps maintain and improve this tool. Thank you! πŸ™


Features

  • 😴 Sleep data (score, REM, deep, light sleep stages)

  • ⚑ Readiness score (HRV, resting HR, body temperature)

  • πŸƒ Activity data (steps, calories, activity score)

  • ❀️ Heart rate monitoring

Related MCP server: Oura MCP Server

Installation

Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "oura": {
      "command": "npx",
      "args": ["-y", "@louis030195/oura-mcp"],
      "env": {
        "OURA_API_KEY": "your-oura-api-key"
      }
    }
  }
}

Claude Code

# Install globally in user scope with API key
claude mcp add -s user oura npx -e OURA_API_KEY=your-oura-api-key -- -y @louis030195/oura-mcp

Get Your Oura API Key

  1. Go to Oura Personal Access Tokens

  2. Click "Create New Personal Access Token"

  3. Copy your token (starts with something like 4SKHEL...)

Usage

Once configured, you can use natural language to access your Oura data:

  • "How did I sleep last night?"

  • "Show me my sleep data for the past week"

  • "What's my readiness score today?"

  • "How many steps did I take yesterday?"

  • "Show my heart rate data from last week"

Tools

oura_sleep

Get daily sleep data including sleep score, sleep stages (REM, deep, light), efficiency, and timing.

Parameters:

  • start_date (required): Start date in YYYY-MM-DD format

  • end_date (optional): End date in YYYY-MM-DD format

oura_readiness

Get daily readiness score, HRV balance, resting heart rate, and body temperature deviation.

Parameters:

  • start_date (required): Start date in YYYY-MM-DD format

  • end_date (optional): End date in YYYY-MM-DD format

oura_activity

Get daily activity data including steps, calories burned, and activity score.

Parameters:

  • start_date (required): Start date in YYYY-MM-DD format

  • end_date (optional): End date in YYYY-MM-DD format

oura_heartrate

Get heart rate data over time.

Parameters:

  • start_date (required): Start date in YYYY-MM-DD format

  • end_date (optional): End date in YYYY-MM-DD format

Development

# Clone the repo
git clone https://github.com/louis030195/oura-mcp.git
cd oura-mcp

# Install dependencies
npm install

# Build
npm run build

# Run locally
OURA_API_KEY=your-api-key npm start

License

MIT

Author

Louis Beaumont

Available Tools

4 tools
oura_activityB

Get daily activity data including steps, calories, and activity score

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoOptional end date in YYYY-MM-DD format
start_dateYesStart date in YYYY-MM-DD format

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It enumerates returned data fields but says nothing about authentication, rate limits, whether the range is inclusive, or what happens on missing days β€” meaningful gaps for a data-fetch tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the resource and its key contents front-loaded; every word earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with fully documented schema and no output schema, the description is nearly sufficient: it names the resource and the fields returned. It only lacks confirmation of read-only nature and date-range semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both start_date and end_date are already documented as YYYY-MM-DD with end_date optional. The description adds no parameter-level meaning (e.g., max range, inclusivity), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') plus resource ('daily activity data') and enumerates the returned fields (steps, calories, activity score). It is clear on its own, though it never explicitly contrasts itself with siblings like oura_readiness or oura_heartrate, which also aggregate daily metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance: no note that this is for activity/steps tracking versus the sleep or readiness siblings, and no mention of the date-range requirement or default behavior. The agent must infer the selection context from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oura_heartrateC

Get heart rate data over time

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoOptional end date in YYYY-MM-DD format
start_dateYesStart date in YYYY-MM-DD format

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it discloses almost nothing: no return granularity (samples vs. aggregates), no pagination or size limits, no auth requirements, and no statement that this is a read-only operation. 'Over time' hints only vaguely at a time series.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or redundancy. It is efficient, though arguably too terse to be maximally useful given the missing behavioral detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool this is minimally adequate: the schema covers the inputs and no output schema exists to explain. However, with no annotations and no output schema, the description should say more about what a heart rate 'time series' response looks like and how large a range can be requested.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both start_date and end_date with format guidance. The description adds no extra semantics such as default ranges, timezone handling, or whether end_date is inclusive, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('heart rate data') with a temporal scope ('over time'). It does not explicitly differentiate from siblings, but the sibling tools (sleep, readiness, activity) cover distinct data domains, so there is little real ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, nor any mention of prerequisites such as Oura authentication or data availability. The only implied usage is the date-range focus carried by the parameter names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oura_readinessB

Get daily readiness score, HRV balance, resting heart rate, and body temperature

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoOptional end date in YYYY-MM-DD format
start_dateYesStart date in YYYY-MM-DD format

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It doesn't state that this is a read-only operation, what authentication it needs, how far back dates can go, whether end_date is inclusive, or what the response looks like. Only the list of returned metrics adds any behavioral signal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the resource named first and no redundant or filler content. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description partly compensates by naming the four returned metrics, which is genuinely useful. However, for a date-range read tool with no annotations, it omits output format, date-range limits, and behavior when end_date is absent, leaving real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both start_date and end_date documented as YYYY-MM-DD strings, so the baseline is 3. The description adds nothing beyond the schema about parameter behavior (no range limits, no default when end_date is omitted).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb 'Get' plus a named resource ('daily readiness score') and an enumeration of the returned metrics (HRV balance, resting heart rate, body temperature). This clearly separates it from oura_sleep/oura_activity/oura_heartrate even though those siblings are never named. It stops short of explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the word 'daily' and the readiness-specific metrics tell an agent this is the recovery/readiness endpoint rather than sleep, activity, or heart-rate. There is no explicit statement of when to prefer this tool over its siblings and no mention of any date-range restrictions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oura_sleepC

Get daily sleep data including sleep score, sleep stages (REM, deep, light), and sleep duration

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoOptional end date in YYYY-MM-DD format
start_dateYesStart date in YYYY-MM-DD format

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. 'Get' implies a read, but the description says nothing about whether days with missing data are omitted, whether end_date defaults to today, rate limits, or auth requirements. For a data-retrieval tool with zero annotation coverage, that is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the core capability front-loaded and no wasted phrasing. It could be slightly tighter but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read with no output schema, the description covers what data comes back, which is helpful. It omits date-range behavior and any reference to alternatives, leaving the agent to infer the query semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both date parameters and their YYYY-MM-DD format are already documented in the schema. The description adds no parameter-level meaning (e.g., what happens when end_date is omitted), so the baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('daily sleep data') and enumerates the returned fields (sleep score, sleep stages, duration). It is distinguishable from the oura_readiness/activity/heartrate siblings via the resource name, though it never explicitly contrasts itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus the sibling Oura tools, and no prerequisites or date-range conventions stated. The word 'daily' weakly implies a per-day date-range query, but nothing tells the agent how to choose between this and oura_readiness or how wide a range to request.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 4 tool updatesv0.1.0
    • First observedoura_activity
    • First observedoura_heartrate
    • First observedoura_readiness
    • First observedoura_sleep

TDQS

B3.3/5.0

Scored across 4 tools

Disambiguation4/5

Each tool targets a distinct Oura data domain (sleep, readiness, activity, heart rate), so an agent can generally tell them apart. There is slight potential overlap because readiness includes resting heart rate and HRV, while heartrate returns heart rate over time, but the descriptions make the intended distinction clear enough.

Naming Consistency5/5

All four tools follow the same predictable oura_<noun> pattern (oura_sleep, oura_readiness, oura_activity, oura_heartrate). There are no mixed conventions, camelCase, or inconsistent verbs.

Tool Count4/5

Four tools is a reasonable, focused set for a read-only Oura data server covering the main daily metrics. It is slightly thin compared to the full breadth of Oura data types, but not problematic.

Completeness3/5

The core daily metrics (sleep, readiness, activity, heart rate) are covered, but obvious Oura data surface areas are missing, such as workouts, tags, sessions, and SpO2. The server is read-only, which is acceptable for Oura's API, but the absence of a workout or tag endpoint is a notable gap.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    Enables querying sleep, readiness, and resilience data from the Oura API via the Model Context Protocol (MCP), allowing natural language interaction and seamless integration with tools like Claude.
    6
    39
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Oura Ring health data, including sleep, activity, readiness, and stress metrics via the Model Context Protocol. It enables users to query their personal biometric information and daily health summaries through natural language in MCP-compatible clients.
    681 npm
    MIT