Skip to main content
Glama
royreznik

Oura Ring MCP Server

List sleep periods

list_sleep_periods
Read-onlyIdempotent

Retrieve individual sleep periods with bedtime, sleep stages, duration, heart rate, HRV, and readiness scores across a date range. Exclude naps or rejected periods and paginate results.

Instructions

List individual sleep periods (nights and, by default, naps) with bedtime, hours in bed and asleep, deep/REM/light/awake hours, latency, efficiency, average and lowest heart rate, average HRV, breathing rate and the readiness score each produced. Use it for sleep duration, stages and overnight HRV or heart rate across days; use list_daily_sleep for scores only, and pass a sleep_id to get_sleep_period for the full hypnogram. Periods the user rejected or deleted are left out, and each period belongs to the day the user woke up. Range: the last 7 days by default; set start and end (inclusive, YYYY-MM-DD) or days (up to 400, ignored when start is set). Returns { records, next_token }, oldest first. Days without data are absent, and today's data appears only after the ring syncs. If next_token is not null, call again with it for the rest. raw: true returns Oura's original objects.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
endNoLast day to include (YYYY-MM-DD). Defaults to today.
rawNoReturn Oura's raw API objects instead of compact summaries with friendly units.
daysNoShortcut for start: the last N days up to end. Ignored when start is set.
startNoFirst day to include (YYYY-MM-DD).
next_tokenNoPass the next_token from a previous call to get the following records.
include_napsNoSet false to return only long (main) sleeps.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: rejected or deleted periods are excluded, each period is attributed to the wake-up day, days without data are absent, and today's data only appears after the ring syncs. It also documents pagination termination (call again if next_token is not null) and the raw:true escape hatch.

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?

Dense but front-loaded: purpose first, then routing to siblings, then behavioral/range/pagination details. Every sentence carries distinct information (exclusions, wake-up-day semantics, defaults, sync caveat, raw mode) with no filler.

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

Completeness5/5

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

With no output schema, the description compensates by specifying the return shape ({ records, next_token }, oldest first) and pagination behavior. Combined with the range defaults, exclusion rules and sync caveat, an agent has everything needed to call this correctly on the first try.

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 start, end, days, next_token, raw and include_naps. The description restates the same facts (inclusive YYYY-MM-DD, days up to 400 ignored when start is set) rather than adding new parameter-level meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource (list individual sleep periods) and immediately enumerates the fields returned (bedtime, hours in bed/asleep, stage hours, latency, efficiency, HR, HRV, breathing rate, readiness). It explicitly differentiates itself from list_daily_sleep (scores only) and get_sleep_period (full hypnogram), so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('sleep duration, stages and overnight HRV or heart rate across days') and names two alternatives with the exact condition that selects each ('list_daily_sleep for scores only', 'pass a sleep_id to get_sleep_period for the full hypnogram'). Nothing is left to inference.

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