Oura MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Oura MCP ServerWhat was my sleep score and readiness for today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Oura MCP Server
A Model Context Protocol (MCP) server for the Oura Ring API v2. It gives Claude Desktop, Claude Code and other MCP clients read only access to your sleep, readiness, activity, heart rate, stress, workouts and the rest of the data Oura exposes.
Everything here reads. There are no tools that change anything in your Oura account.
Quick Start
1. Register an Oura API application
Oura retired personal access tokens in December 2025, so the server signs in with OAuth like any other Oura app. You register your own application once; it is free and needs no approval for personal use (Oura only reviews apps with more than 10 users).
Go to https://cloud.ouraring.com/oauth/applications and create an application.
Set its Redirect URI to exactly:
http://localhost:8765/callbackKeep the page open. You need the Client ID and Client Secret in step 3.
2. Install
git clone https://github.com/robcerda/oura-mcp-server.git
cd oura-mcp-server
uv sync --locked--locked installs exactly what uv.lock pins, verified against the hashes it records, and refuses to re-resolve.
Using pip instead:
pip install -r requirements-lock.txt --require-hashes
pip install -e . --no-deps3. Sign in (one time)
Authentication happens in your terminal, not in Claude, so the client secret never passes through the model:
uv run python login_setup.pyThe script asks for the client ID and secret (or reads OURA_CLIENT_ID and OURA_CLIENT_SECRET), opens Oura's consent page in your browser, catches the redirect on localhost:8765, and saves the session to your system keyring. Grant every data type you want the tools to read; a type you untick makes its tool fail with a 403 until you sign in again.
The access token refreshes itself from then on. You only need to run the script again if the session is revoked.
Command | What it does |
| Sign in through the browser |
| Sign in without the local listener: paste the redirected URL instead |
| Show the stored session's scopes and expiry (never the tokens) |
| Delete the stored session |
Use --paste over SSH, in a container, or if you registered a redirect URI other than http://localhost:8765/callback (pass it with --redirect-uri). After approving, the browser lands on the redirect URI; the page may fail to load, which is fine, because the address bar holds the code the script needs.
4. Configure your MCP client
Claude Code:
claude mcp add oura -- uv run --locked --project /path/to/oura-mcp-server oura-mcp-serverClaude Desktop: add this to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"Oura": {
"command": "uv",
"args": [
"run",
"--locked",
"--project",
"/path/to/oura-mcp-server",
"oura-mcp-server"
]
}
}
}Replace /path/to/oura-mcp-server with your checkout, and use the full path to uv if your client cannot find it (which uv). --locked makes a lockfile that has drifted from pyproject.toml a startup error instead of a silent re-resolve against PyPI.
Restart the client, then ask something like "How has my sleep been this week?"
Try it without an account
Set OURA_MCP_SANDBOX=1 in the server's environment and every tool reads Oura's sandbox sample data instead. No sign in is needed. The sandbox has no personal info, so get_personal_info returns a 404 there.
"env": { "OURA_MCP_SANDBOX": "1" }Related MCP server: Oura MCP Server
Available Tools
All 22 registered tools. Optional parameters are marked with a trailing question mark. The table is checked against the live tool registry and the functions' signatures by tests/test_readme_tool_reference.py, so it does not drift.
Tool | Description | Parameters |
| Report whether a session is stored, its scopes, and when it expires | None |
| Activity score, steps, calories, activity time by intensity |
|
| Estimated vascular age |
|
| Readiness score, contributors, temperature deviation |
|
| Resilience level and its contributors |
|
| Sleep score and its contributors |
|
| Average SpO2 during sleep and breathing disturbance index |
|
| Time in high stress and high recovery, day summary |
|
| One record per day combining scores, activity, stress, SpO2 and main sleep |
|
| One document by id, with every field |
|
| Tags logged in the Oura app |
|
| Heart rate samples, optionally aggregated by hour or day |
|
| Age, weight, height, biological sex, email | None |
| Rest mode periods and episodes |
|
| Ring battery level and charging state |
|
| Ring hardware, color, size, firmware | None |
| Guided and unguided sessions (meditation, breathing, rest) |
|
| Detailed sleep periods: bedtimes, stages, heart rate, HRV |
|
| Recommended bedtime window |
|
| VO2 max estimates |
|
| Workouts: type, time, calories, distance, intensity |
|
| Instructions for connecting an Oura account | None |
Two prompts are also registered: weekly_health_review and sleep_deep_dive.
How the tools behave
Dates are inclusive.
start_date="2026-09-01", end_date="2026-09-07"returns all seven days. (Oura's ownend_dateis exclusive; the server adds the day for you.) With no dates, tools return the last 7 days including today.Heart rate and battery take datetimes, ISO 8601 such as
2026-09-20T22:00:00-07:00. A time without an offset is read as UTC. Heart rate defaults to the last 24 hours; raw data is 288 samples a day, so passaggregate="hour"or"day"for longer windows.Embedded time series are left out by default. Sleep periods, daily activity and sessions carry 5 minute sleep phases, 30 second movement, per sample heart rate and HRV, which dominate the response. The envelope's
omitted_time_serieslists what was dropped; passinclude_time_series=true, or useget_documenton a single item, to get them.Paging is automatic. Tools follow Oura's
next_tokenfor up to 10 pages. If there is more, the response hastruncated: trueand anext_tokento pass back with the same dates.Responses are self describing. Every list tool returns
{tool, args, count, truncated, next_token, data}, whereargsshows the dates actually queried after defaults.get_daily_summarydegrades gracefully. Each collection needs its own scope; any that fail are listed underunavailableand the rest are still returned.
Data freshness
Oura only has what the ring has synced. Sleep, readiness and bedtime recommendations appear after you open the Oura app in the morning; activity, stress and heart rate sync in the background through the day. Today's sleep missing is almost always a sync that has not happened yet.
Usage Examples
How has my sleep been over the last two weeks?Compare my readiness on days after I logged alcohol to the other days this month.What was my heart rate doing overnight on September 20th? Aggregate by hour.Show my workouts this month and the activity score on each of those days.Containerized Deployment
The Docker image uses Astral's uv/Python 3.12 slim base, installs from uv.lock, and defaults to HTTP on 0.0.0.0:8000 inside the container.
docker build -t oura-mcp-server .Sign in once into a persistent volume. A container cannot open your browser, so use --paste:
docker run --rm -it \
-v oura-session:/home/app/.oura-mcp-server \
oura-mcp-server oura-mcp-login --pasteThen start the server with the same volume:
docker run -d --name oura-mcp --restart unless-stopped \
-p 127.0.0.1:8000:8000 \
-v oura-session:/home/app/.oura-mcp-server \
oura-mcp-serverConnect your MCP client to http://127.0.0.1:8000/mcp using Streamable HTTP.
The session is stored unencrypted in that volume. A container has no keyring backend, so the session falls back to a file (mode 0600 in a 0700 directory owned by uid 10001). File permissions do not help against anyone who can reach the volume from outside the container: root on the host, the docker group, docker cp, backups of /var/lib/docker. The volume holds your client secret and a refresh token that renews itself, so treat it like a password, and remove it with docker volume rm oura-session when you are done.
This server is single account. Every client that can reach it reads the same person's health data. Put it behind an authenticated HTTPS reverse proxy or a private network before exposing it beyond localhost. Host and Origin checks protect against DNS rebinding; they do not authenticate callers.
To run the image over STDIO instead, add -e OURA_MCP_TRANSPORT=stdio and -i.
HTTP Transport Configuration
The server supports MCP Streamable HTTP at /mcp when explicitly selected:
uv run --locked oura-mcp-server --transport http --host 127.0.0.1 --port 8000Setting | CLI flag | Environment variable | Default outside Docker |
Transport |
|
|
|
Listen address |
|
|
|
Listen port |
|
|
|
Additional allowed Host headers |
|
| None; loopback hosts are always allowed |
Additional allowed browser Origins |
|
| None; HTTP loopback origins are always allowed |
CLI flags override their environment settings.
Other environment variables
Variable | Purpose |
|
|
| Read by |
| Redirect URI for sign in, if not |
| Directory for the file fallback (default |
Troubleshooting
"Not signed in to Oura": run uv run python login_setup.py, then retry. Restart the client if it still says so.
401 or 403 mentioning a scope on one tool: that data type's scope was unticked on Oura's consent screen, or was granted before this server requested it (resilience needs stress, which sessions created before it was added lack), or it needs hardware you do not have (SpO2 needs a Gen 3 ring or later). check_auth_status lists the granted and missing scopes. Sign in again and grant it.
"Oura rejected the stored refresh token": the session was revoked (for example by removing the app's access in your Oura account). Sign in again.
invalid_client at sign in: the client ID or secret is wrong. Redirect URI mismatch: the application's redirect URI must match the one the script uses character for character, including http and the port.
Port 8765 in use: free it, or register a different redirect URI and pass --redirect-uri, or use --paste.
Today's data is missing: open the Oura app to sync the ring. See Data freshness.
Technical Details
Project Structure
oura-mcp-server/
├── src/oura_mcp_server/
│ ├── app.py # FastMCP instance, transport flags, entry point
│ ├── client.py # httpx client, token refresh, retries, paging
│ ├── oauth.py # Authorization URL, code exchange, refresh
│ ├── token_store.py # Keyring storage with 0600 file fallback
│ ├── login.py # Terminal sign in (also the oura-mcp-login command)
│ ├── params.py # Shared parameters, date handling, response envelope
│ ├── queries.py # Fetch and wrap step shared by the list tools
│ ├── server.py # Re-exports every tool
│ └── tools/ # MCP tools grouped by domain
├── login_setup.py # Terminal sign in script
├── requirements-lock.txt
└── tests/Session management
The session (client ID and secret, access token, refresh token, expiry) is stored in the system keyring, falling back to
~/.oura-mcp-server/session.jsonat mode 0600 where no keyring backend exists.Access tokens refresh automatically shortly before expiry, and once more if Oura answers 401.
Oura rotates refresh tokens: each refresh spends the old one. MCP clients often start several copies of a server, so before refreshing the server checks storage for a session another copy already renewed, and if Oura rejects a spent refresh token it looks there again before asking you to sign in.
Security
Sign in happens in the terminal. The client secret never appears in a tool argument or in the model's context, and no tool returns token values.
There is no sign out tool, so nothing the model reads back can talk it into deleting your session. Use
login_setup.py --logout.All tools are read only. The webhook subscription API is not exposed: it needs a public HTTPS endpoint and writes to your application's configuration.
The server requests every read scope Oura offers. You choose what to actually grant on the consent screen.
Development
uv sync --locked --extra dev
uv run --no-sync pytest -q
uv run --no-sync ruff check .After changing dependencies in pyproject.toml, run uv lock and regenerate the pip pins; CI fails if they disagree:
uv export --frozen --no-emit-project --no-editable --no-dev \
--format requirements-txt --output-file requirements-lock.txtLicense
MIT
Available Tools
22 toolscheck_auth_statusA
Report whether an Oura session is stored, which scopes it has, and when it expires.
Never returns token values. The access token refreshes automatically, so an expired access token with a stored refresh token is still a working session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds important non-obvious facts: it never returns token values, access tokens refresh automatically, and an expired access token with a stored refresh token still counts as a working session. This is strong for a zero-parameter status tool, though it does not explicitly state side-effect-free behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no fluff. The core purpose is front-loaded, and the critical security and refresh behavior follow in a compact paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter status check with an output schema present, the description is complete. It tells the agent what the tool reports, what it will never return, and how to interpret an expired access token, leaving no missing information needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4 and no parameter explanation is needed. The description appropriately focuses on the output semantics instead of inventing parameter-level details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Report') and resource ('Oura session'), and precisely names the three things an agent learns: whether a session is stored, which scopes it has, and when it expires. This clearly differentiates it from data-fetching siblings and setup_authentication.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is the tool for inspecting the stored auth session, its scopes, and expiration. It does not explicitly name alternatives or say 'use before calling data endpoints,' but the use case is unambiguous from the first sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_activityA
Get daily activity: activity score (0-100) and contributors, steps, active and total calories (kcal), equivalent walking distance (meters), time in high, medium and low activity and sedentary (seconds), MET minutes, and inactivity alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. | |
| include_time_series | No | Include the embedded time series (5 minute sleep phases, 30 second movement, per sample heart rate and HRV, MET samples). Off by default because they dominate the response size. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It lists return fields but does not mention pagination/truncation behavior, timezone handling, authentication requirements, or any other operational traits. As a read-only getter, the lack of side-effect warnings is less critical, but the description still leaves behavioral details to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with no filler or repetition. It front-loads the tool's purpose and then efficiently lists the returned metrics, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and all parameters are fully documented in the input schema, the description is largely complete for a simple read-only getter. It clearly states what data is returned, though it could add a note about pagination or authentication prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters, including defaults and the purpose of include_time_series. The description adds no parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Get daily activity') and enumerates the exact metrics returned (activity score, steps, calories, distance, activity times, MET minutes, inactivity alerts). This clearly distinguishes it from sibling tools focused on sleep, stress, readiness, or workouts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for retrieving daily activity metrics, but it does not explicitly state when to use it over alternatives like get_daily_summary or get_workouts, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_cardiovascular_ageB
Get cardiovascular age: Oura's estimate of vascular age in years, from pulse wave velocity, to compare against actual age.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention that this is a read-only operation, nor does it hint at pagination via the next_token parameter, rate limits, or authentication needs. The description focuses solely on the meaning of the metric, leaving the agent to infer operational behavior from the tool name and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence that leads with the action and resource, then provides essential context. There is no filler or redundancy, making it efficiently scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool is a simple query with optional parameters and an output schema exists, the description covers the core purpose and meaning of the data. It does not explain return structure, but that is handled by the output schema. The only gap is the absence of usage guidance, which is penalized separately; for the data itself, the description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (start_date, end_date, next_token) fully documented in the schema. The description adds no additional parameter-level detail or context beyond what the schema already provides. Baseline of 3 is appropriate given the schema's thoroughness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' with a specific resource 'cardiovascular age' and explains it as Oura's estimate of vascular age from pulse wave velocity. This distinguishes it from the many sibling daily-metric tools like get_daily_activity or get_daily_stress, leaving no ambiguity about what this tool retrieves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There is no mention of conditions, prerequisites, or scenarios that would favor this tool over the similarly named get_daily_* siblings. The only hint is the phrase 'to compare against actual age,' which suggests a purpose but does not offer explicit selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_readinessA
Get daily readiness scores (0-100) with contributors (activity balance, body temperature, HRV balance, previous day activity, previous night, recovery index, resting heart rate, sleep balance, sleep regularity) and body temperature deviation from baseline in degrees Celsius.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It discloses that the tool returns a score and contributors, and a deviation in degrees Celsius, which is useful. However, it omits any mention of authentication requirements, rate limits, pagination behavior (even though the schema has next_token), or that it is a read-only operation. The description provides some behavioral context but not comprehensive transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the primary purpose (daily readiness scores) and follows with a concise enumeration of contributors and the deviation measure. It avoids redundancy and fluff, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, reducing the need to detail return structures. The description covers the score range and units, and the schema covers parameter details and pagination through next_token. The main missing context is a note about data availability or the expected multi-day nature implied by date range, but given the output schema and parameter descriptions, the description is sufficiently complete for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (end_date, next_token, start_date) already documented with defaults and explanations. The tool description adds no additional parameter semantics, such as date range behavior or token usage, so it provides no value beyond what the schema already offers. Baseline of 3 applies due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves daily readiness scores (0-100) and lists the contributors and body temperature deviation, making the function and output unambiguous. It is distinct from other daily metrics like cardiovascular age or stress, so a agent can immediately understand what this tool offers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool compared to the many sibling daily-metric tools (e.g., get_daily_activity, get_daily_stress). It does not mention prerequisites, exclusions, or alternatives, leaving the agent to infer the appropriate context without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_resilienceA
Get daily resilience: an estimate of the ability to withstand and recover from physiological stress, as a level (limited, adequate, solid, strong, exceptional) with sleep recovery, daytime recovery and stress contributors.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure. It explains the output semantics (level and component values) but does not mention that data is returned for a date range, uses pagination (next_token), or that it is read-only. The schema covers defaults and pagination, but the description could be more explicit about the scope and any side effects. Overall, it provides some behavioral insight but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the main action ('Get daily resilience') and immediately provides the core semantics (definition, levels, components). Every phrase adds value, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (which would detail the return structure) and parameter descriptions are fully documented in the schema, the description covers the essential purpose and output semantics. There is nothing an agent needs to call this tool correctly that is missing—pagination and date defaults are in the schema, and the description clarifies what 'resilience' means in this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (start_date, end_date, next_token) already described in the schema. The tool description does not add any additional parameter-specific meaning beyond what the schema already provides, so it meets the baseline without exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('daily resilience'), and defines what resilience means in this context ('ability to withstand and recover from physiological stress'). It enumerates the output levels (limited, adequate, solid, strong, exceptional) and components (sleep recovery, daytime recovery, stress contributors), clearly distinguishing it from sibling tools like get_daily_stress or get_daily_sleep.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a user needs resilience data, and the definition of resilience makes it clear this differs from other daily metrics. However, it does not explicitly mention when not to use this or point to alternatives; the context is clear but no exclusions or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_sleepA
Get daily sleep scores (0-100) with their contributors: deep sleep, efficiency, latency, REM sleep, restfulness, timing and total sleep.
For durations, stages, heart rate and HRV use get_sleep_periods.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 correctly implies a read operation ('Get') but does not disclose pagination behavior (despite the next_token parameter) or authentication requirements. It also doesn't mention any rate limits or data freshness. While the safety profile is obvious (read-only), additional behavioral context would be valuable for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero filler. The first sentence defines the tool's output and scope, and the second provides a clear routing to the sibling. It is perfectly front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with 3 optional parameters and an output schema, the description covers the core purpose and routing. It could mention that results may be paginated (implied by next_token) and that the data is read-only (implied by 'get'), but these are minor gaps. The description is sufficient for an agent to call it correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (end_date, start_date, next_token) already documented with defaults and formats. The tool description adds no extra parameter meaning, which is acceptable since the schema is comprehensive. The baseline of 3 applies because the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets daily sleep scores (0-100) and lists all contributors (deep sleep, efficiency, latency, REM sleep, restfulness, timing, total sleep). It explicitly differentiates from the sibling tool get_sleep_periods by naming it and specifying what that tool covers. This makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use an alternative: 'For durations, stages, heart rate and HRV use get_sleep_periods.' This is a clear when-not condition and names the specific sibling tool, leaving no ambiguity about which tool to choose for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_spo2B
Get average blood oxygen saturation (SpO2 %) during sleep and the breathing disturbance index. Requires a Gen 3 or later ring.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It states the two metrics returned but does not mention pagination (despite a next_token parameter), potential latency, or any constraints beyond the ring requirement. It doesn't clarify that this is a read-only operation, though that is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core purpose, and adds a crucial requirement (Gen 3+ ring) without any waste. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description doesn't need to explain return values. It provides the essential purpose, a hardware requirement, and the temporal context ('during sleep'). It lacks mention of pagination or date range defaults, but those are covered by parameter descriptions. Overall, it's sufficient for an agent to decide when to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a clear description (date range and pagination). The tool description adds no additional meaning beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves average blood oxygen saturation (SpO2 %) during sleep and the breathing disturbance index. It uses a specific verb ('Get') and names the exact resource, making it distinct from other get_daily_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a hardware prerequisite ('Requires a Gen 3 or later ring') but gives no guidance on when to use this tool versus alternatives like get_daily_sleep or get_heart_rate. There is no mention of when not to use it or which sibling to choose instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_stressA
Get daytime stress: seconds spent in high stress and in high recovery each day, and a day summary of restored, normal or stressful.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It discloses the output granularity (per day), the units (seconds), and the summary categories, which goes beyond the tool name. It does not mention pagination or read-only nature, but 'Get' implies a read operation and the schema covers pagination via next_token.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose and then adds essential detail about the output. Every word earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the parameter schema is fully documented, the description is largely complete. It could clarify what 'daytime' means or how the summary categories are derived, but the combination of description and schema gives an agent enough to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents start_date, end_date, and next_token. The description adds no parameter-specific detail, but none is needed because the schema descriptions already explain defaults and pagination behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('daytime stress'), and enumerates the exact metrics returned: seconds in high stress, seconds in high recovery, and a day summary of restored, normal, or stressful. This clearly distinguishes it from sibling tools like get_daily_summary or get_daily_readiness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's context clear: use it when you need daily daytime stress and recovery metrics. It does not explicitly name alternatives or exclusion criteria, but the specificity of the resource makes the intended use obvious among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_summaryA
Get one record per day combining the headline numbers: sleep, readiness and activity scores, steps and calories, stress and recovery time, SpO2, resilience level, temperature deviation, and the main sleep period (bedtime, durations, efficiency, HRV, heart rate). Durations are in seconds.
The best starting point for questions like "how have I been sleeping" or "how was my week". Collections the session has no scope for are listed under 'unavailable' and the rest are still returned.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses that durations are in seconds and that unavailable collections appear as 'unavailable' while other data is still returned. However, it does not mention auth requirements, read-only safety, or any other side-effect/availability caveats, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The metric list is long but necessary for a summary tool, and the second sentence adds usage guidance plus an important edge-case behavior without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool aggregates many metrics and already has an output schema, the description covers the essential context: cardinality (one record per day), included metrics, duration units, and partial-data behavior. It could mention authentication or fallback behavior, but it is largely complete for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both start_date and end_date already have clear explanations of format and defaults. The description does not add parameter-specific semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get one record per day combining the headline numbers'. It enumerates the included metrics, distinguishing this aggregated summary from the many sibling daily-getter tools without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'The best starting point for questions like "how have I been sleeping" or "how was my week"' gives clear contextual guidance for when to prefer this tool. It does not explicitly name alternative tools or state when not to use it, so it stops short of a full when/when-not explanation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentA
Get one Oura document by id, with every field including embedded time series. Use it to drill into a single sleep period, workout or session from a list result.
| Name | Required | Description | Default |
|---|---|---|---|
| data_type | Yes | Collection the document belongs to, e.g. 'sleep'. | |
| document_id | Yes | The document's 'id' field from a list result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool returns every field including embedded time series, which is useful, and it implies the document comes from a list result. However, it does not mention authentication requirements, error behavior, or the full response structure (though an output schema exists). For a simple read operation, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and scope, followed by a usage hint. Every word earns its place; there is no filler or repetition of schema details. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 required parameters, a complete enum, and an output schema, the description is fairly complete. It tells the agent when to use it (drilling into a single item from a list) and what to expect (full fields with time series). It doesn't mention error handling or authentication, but these are not critical for a simple getter and are partially covered by the output schema. It is slightly above average in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'data_type' and 'document_id' have descriptions. The description adds the clarification that 'document_id' comes from a list result, but the schema already states that ('The document's 'id' field from a list result'). Thus the description adds minimal value beyond the schema, consistent with the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('one Oura document by id') and explicitly mentions that it includes every field with embedded time series. It also distinguishes itself from sibling list/getter tools by stating its role: drilling into a single sleep period, workout, or session from a list result. This fully clarifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is meant to drill into a single item after obtaining a list result from sibling tools. It does not explicitly name alternatives or state when not to use it, but the intended workflow is implicit and actionable. It gives enough guidance to select this tool over the many sibling getters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_enhanced_tagsA
Get tags the user logged in the Oura app (caffeine, alcohol, illness, travel, custom tags, etc.) with start and end times and comments. Useful for explaining changes in sleep or readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does not disclose that the tool is read-only, that results may be paginated (next_token), or how errors are handled. It only states what data is returned, leaving behavioral traits undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The first sentence front-loads the action and resource, and the second adds a useful use case. It is appropriately sized, though the second sentence is not strictly necessary for invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema and an output schema present, the description plus schema give an agent sufficient information to call the tool. It could mention pagination or read-only status, but those are either covered by the schema or implied by the action. A 4 reflects that the description is adequate given the structured context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents each parameter (start_date, end_date, next_token) with defaults and pagination semantics. The description adds no parameter-level meaning beyond that, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('tags the user logged in the Oura app') with concrete tag examples and returned data (start/end times, comments). No sibling tool appears to handle tags, so it is clearly distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an implied use case ('Useful for explaining changes in sleep or readiness') but does not explicitly contrast with sibling tools or state when not to use it. No alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_heart_rateB
Get heart rate samples (bpm) at roughly 5 minute intervals, each tagged with its source: awake, rest, sleep, workout, session or live. Defaults to the last 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | Return only the most recent sample. | |
| aggregate | No | Summarize samples into hourly or daily min/avg/max buckets (UTC). Recommended for windows longer than a day; raw data is 288 samples a day. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| end_datetime | No | End of the window, ISO 8601 datetime. Defaults to now. | |
| start_datetime | No | Start of the window, ISO 8601 datetime such as '2026-01-15T00:00:00-08:00'. Defaults to 24 hours before end_datetime. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the sampling interval and default window, but does not mention pagination via next_token, aggregation recommendations, error behavior, or any edge cases. The schema covers some of this, but the description itself is thin on behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no fluff. It immediately states the purpose, data details, and default behavior, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and complete parameter descriptions, the description is adequate for a simple read operation. However, it lacks usage guidance and behavioral context that could help an agent decide when to use this tool or handle large result sets. It is not incomplete but not comprehensive either.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter definitions. The tool description adds minimal value beyond schema—it mentions the default window and data characteristics but does not clarify parameter usage beyond what is already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves heart rate samples in bpm at 5-minute intervals, tagged with source types, and mentions the default window. It is specific and distinct from other health-related siblings, though it does not explicitly contrast with alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there exclusions or context about when to prefer aggregate vs raw data. The description only mentions defaults, which is not usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personal_infoA
Get the signed in user's profile: age, weight, height, biological sex and email. Fields the user did not grant a scope for come back null.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that fields without granted scopes return null, which is critical for the agent to set expectations. It also implies a read-only nature ('Get') and requires authentication implicitly via 'signed in user'. It does not mention side effects, but the null behavior is the key transparency point and is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero redundancy. The first sentence states the purpose and fields; the second explains the null behavior. It is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description is complete. It lists all returned fields and explains null behavior, which is the only nuance an agent needs. The output schema presumably defines the exact format, so no further explanation is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain them. It does add context about the returned fields, which is helpful even though it's output-related. The baseline for zero-parameter tools is 4, and the description meets that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets the signed-in user's profile and enumerates the specific fields (age, weight, height, biological sex, email). This distinguishes it from sibling tools that retrieve activity, sleep, or auth data. The verb 'Get' and resource 'profile' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the context clear (profile data for the signed-in user), which implicitly tells the agent when to use it. However, it does not explicitly state when not to use it or name alternatives, though the specificity of the fields makes the use case obvious. Slight lack of explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rest_mode_periodsC
Get rest mode periods (when the user turned on rest mode, typically for illness or recovery), with start and end times and logged episodes.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. 'Get' implies a read operation, but the description does not state that it is read-only, does not mention authentication requirements, pagination behavior, or rate limits, and offers no detail beyond the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly identifies the tool's purpose and output. It contains no unnecessary repetition or fluff, though some additional usage guidance could have been included without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple schema with fully documented optional parameters and an output schema, so the description is minimally sufficient for invocation. However, the lack of annotations and absence of any behavioral context (auth, read-only confirmation, pagination) leaves the description slightly incomplete for a fully informed agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents start_date, end_date, and next_token. The description adds no parameter-specific detail beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get rest mode periods') and indicates what is returned (start/end times and logged episodes). It does not explicitly differentiate from siblings like get_sleep_periods, but the resource is distinct enough for an agent to understand the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions rest mode is typically used for illness or recovery, but it provides no guidance on when to choose this tool over siblings like get_sleep_periods or get_sessions. There is no explicit context for selection or exclusion of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ring_battery_levelA
Get ring battery level (%) and charging state. Returns the latest reading by default; set latest to false for readings over a window.
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | Return only the most recent reading. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| end_datetime | No | End of the window, ISO 8601 datetime. Defaults to now. | |
| start_datetime | No | Start of the window, ISO 8601 datetime such as '2026-01-15T00:00:00-08:00'. Defaults to 24 hours before end_datetime. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add useful behavior beyond the schema by mentioning charging state and the default-vs-window behavior, but it omits details like pagination behavior and time-window defaults, which are only covered by the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core purpose is front-loaded and the parameter guidance is compact and actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus the fully documented schema and output schema provide enough information for an agent to call this tool correctly. Minor gaps such as pagination and date defaults are already covered by parameter descriptions, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all four parameters. The description adds context about the latest flag's effect, but does not materially enhance the meaning of the other parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (ring battery level) and the specific data returned (percentage and charging state). It is distinct from all sibling tools, which target different health metrics or configuration data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the default behavior (latest reading) and how to change it (set latest to false for a window), giving clear operational guidance. It does not explicitly contrast with sibling tools, but the resource is unique enough that no alternative is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ring_configurationA
Get the user's ring(s): hardware generation, color, design, size, firmware and setup date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 clearly indicates a read-only operation via 'Get' and lists returned fields, which is adequate for a simple getter. However, it does not disclose authentication requirements, potential absence of rings, or any other behavioral nuances that an agent might need to anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and resource, then lists the relevant data fields. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument getter with an output schema, the description is largely complete: it states the purpose and the data fields returned. The main gap is the absence of any note about authentication or the behavior when no ring exists, but the output schema likely covers return structure and the tool is simple enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds meaning by listing the data fields the tool returns, which helps an agent understand the result even though no parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('the user's ring(s)') and enumerates the exact data fields returned: hardware generation, color, design, size, firmware, and setup date. This distinguishes it from all sibling tools, none of which target ring configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when ring configuration is needed, but it provides no explicit when-to-use or when-not-to-use guidance, nor does it name alternatives. There are no closely related siblings, so the lack of alternatives is less critical, but the guidance is still only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sessionsA
Get guided and unguided sessions from the Oura app (breathing, meditation, rest, etc.): type, start and end time, and mood. Set include_time_series for the heart rate, HRV and motion recorded during each session.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. | |
| include_time_series | No | Include the embedded time series (5 minute sleep phases, 30 second movement, per sample heart rate and HRV, MET samples). Off by default because they dominate the response size. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It discloses the kind of data returned and that include_time_series pulls in heart rate, HRV, and motion, but it does not mention authentication, pagination/truncation, response size effects, or lack of side effects. These are meaningful gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: the first establishes purpose and scope, the second highlights the one parameter worth calling out. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich input schema and an output schema present, the description covers the core semantics adequately: what a session is, what fields are returned, and the optional time series. It is slightly short on operational context like auth requirements and when to choose this over related tools, but those are secondary given the schema and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies; the schema already documents date formats, defaults, and next_token semantics. The description adds only a light reference to include_time_series and does not improve on the schema's parameter explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get guided and unguided sessions from the Oura app', and names concrete session kinds (breathing, meditation, rest) plus fields returned. This makes it easy to distinguish from sibling tools like get_workouts and get_sleep_periods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by naming the Oura session resource, and the second sentence gives an optional-parameter instruction, but there is no explicit when-to-use guidance or comparison to sibling alternatives such as get_workouts. The agent must infer which tool fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleep_periodsA
Get detailed sleep periods: bedtime start and end, total, deep, REM and light sleep durations (seconds), awake time, latency, efficiency, average and lowest heart rate, average HRV, breathing rate, and the readiness computed from that sleep.
A day can have several periods. type 'long_sleep' is the main sleep; naps and short rests appear as 'sleep', 'late_nap' or 'rest'.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. | |
| include_time_series | No | Include the embedded time series (5 minute sleep phases, 30 second movement, per sample heart rate and HRV, MET samples). Off by default because they dominate the response size. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it does disclose the returned fields and period-type taxonomy. It does not mention pagination/truncation, response size, or timezone/date-boundary behavior, even though the next_token parameter implies large results may be cut off.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the concrete purpose and then gives a useful, finite list of returned metrics. The period-type explanation earns its place, though the metric list is slightly dense and could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with a rich output schema and fully documented parameters, the core behavior is sufficiently described. The main missing context is selection guidance among the many sleep/readiness siblings and pagination caveats, so an agent may not know when this call is the right one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (start_date, end_date, next_token, include_time_series) already has a meaningful description, so the baseline applies. The prose mostly describes output content rather than parameter behavior, adding little beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource ('sleep periods') and enumerates the returned metrics (bedtime start/end, sleep-stage durations, heart rate, HRV, breathing rate, readiness), which goes well beyond a vague getter. The distinction between 'long_sleep', 'sleep', 'late_nap', and 'rest' also separates this period-level tool from daily sleep-summary siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'detailed sleep periods' and the explanation of period types imply it is for period-level sleep breakdowns rather than daily summaries, so usage is inferable. However, no alternative tool is named and no explicit when/when-not conditions are given, leaving some selection judgment to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleep_timeA
Get Oura's recommended bedtime window for each day, calculated from recent sleep.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of behavioral disclosure. It does mention that the window is calculated from recent sleep, but it does not disclose pagination behavior via next_token, authentication requirements, or the read-only nature beyond the word 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence that front-loads the core purpose. No filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only optional parameters, all documented in the schema, and an output schema is provided. The main gap is the lack of usage alternatives and behavioral disclosures, but the description is adequate for a straightforward read-only retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions already explain start_date, end_date, and next_token. The tool description does not add extra semantic value for these parameters, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Get') and resource ('Oura's recommended bedtime window') and clearly scopes it per day. It distinguishes itself from sibling sleep tools by specifying it returns a recommendation window, not actual sleep data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the purpose: retrieve a recommended bedtime window. However, there is no explicit guidance on when to choose this over get_daily_sleep or get_sleep_periods, and no when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vo2_maxA
Get VO2 max (cardio capacity) estimates in ml/kg/min. Updated infrequently.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden for behavioral disclosure. 'Updated infrequently' is a useful freshness caveat, but the description does not mention authentication, pagination behavior, or the possibility of missing data, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no redundant filler. It front-loads the core purpose and immediately follows with the one key behavioral caveat, making every word useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only nature, fully documented optional parameters, and an output schema, the description plus schema is nearly sufficient. The main missing piece is explicit routing guidance relative to siblings, but the core invocation details are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters (start_date, end_date, next_token) are fully documented in the schema. The description does not add parameter-specific meaning beyond the metric's units, so it stays at the schema-driven baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies an exact verb and resource: 'Get VO2 max (cardio capacity) estimates in ml/kg/min'. The units and parenthetical make the metric unambiguous and set it apart from sibling tools like get_daily_cardiovascular_age.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, and no explicit when-not-to-use conditions. 'Updated infrequently' hints at freshness constraints but does not direct the agent to a better tool or explain when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workoutsB
Get workouts, auto detected or entered by the user: activity type, start and end time, calories, distance (meters), intensity, and source.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Last day to include (inclusive), YYYY-MM-DD. Defaults to today. | |
| next_token | No | Continue a truncated result: pass the next_token from the previous response along with the same dates. | |
| start_date | No | First day to include, YYYY-MM-DD. Defaults to 6 days before end_date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that results include both auto-detected and user-entered workouts and lists the returned fields, but it omits behavior such as pagination via next_token, authorization requirements, and the default date range behavior (which is only implied by the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler. It front-loads the action ('Get workouts') and immediately provides the useful scope details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter endpoint with a complete schema and an output schema, the description is mostly sufficient, but it lacks usage differentiation among the large sibling set and does not state the authentication or pagination context. An agent could call it correctly from the schema, yet would rely on inference for when to choose it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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_date, end_date, and next_token. The description does not add any parameter-level detail beyond this baseline; it only outlines result contents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb-resource pair 'Get workouts' and enumerates the returned data fields (activity type, times, calories, distance, intensity, source). It is clear, though it does not explicitly distinguish get_workouts from sibling tools like get_sessions or get_daily_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this tool rather than alternatives. The phrase 'auto detected or entered by the user' clarifies the data source but does not say when to choose get_workouts over get_sessions or the daily summary tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_authenticationB
Get instructions for connecting this server to an Oura account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It says 'Get instructions,' which suggests a read-only operation, but the name 'setup_authentication' implies a mutating action. It doesn't state whether calling this tool changes state, requires user interaction, or returns a one-time code. This ambiguity is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the action and purpose. No wasted words. It is appropriately concise for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description could be sufficient, but it leaves out key context: whether the tool is a read-only instructional endpoint or a mutating setup flow, what the output contains (URL, steps, token), and any preconditions like having a client ID or secret. The output schema may cover return format, but the description doesn't hint at side effects or prerequisites, which are essential for an authentication setup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description doesn't need to explain any. The schema is empty, and there is nothing for the description to add. Baseline 4 applies because there are no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action: get instructions for connecting the server to an Oura account. It names the verb and resource, and it's obviously distinct from the sibling get_* data retrieval tools and check_auth_status. However, it doesn't explicitly contrast with check_auth_status, leaving minor ambiguity about whether this tool both initiates and returns instructions or just returns pre-existing instructions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you need to connect the server to an Oura account, but it doesn't explicitly state when to use it versus check_auth_status (which presumably checks if auth is already set up). No mention of prerequisites or when not to use it. The usage context is implied but not explicit.
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.
22 tool updates
v0.1.0- First observed
check_auth_status - First observed
get_daily_activity - First observed
get_daily_cardiovascular_age - First observed
get_daily_readiness - First observed
get_daily_resilience - First observed
get_daily_sleep - First observed
get_daily_spo2 - First observed
get_daily_stress - First observed
get_daily_summary - First observed
get_document - First observed
get_enhanced_tags - First observed
get_heart_rate - First observed
get_personal_info - First observed
get_rest_mode_periods - First observed
get_ring_battery_level - First observed
get_ring_configuration - First observed
get_sessions - First observed
get_sleep_periods - First observed
get_sleep_time - First observed
get_vo2_max - First observed
get_workouts - First observed
setup_authentication
TDQS
Scored across 22 tools
Every tool targets a distinct data resource or lifecycle step. Overlaps like get_daily_sleep, get_sleep_periods, get_sleep_time, and get_daily_summary are clearly differentiated by their descriptions (scores vs. detailed periods vs. recommended bedtime vs. combined summary). No two tools appear to serve the same purpose.
All tools follow a consistent verb_noun pattern using lowercase with underscores, predominantly 'get_' for data retrieval, with setup_authentication and check_auth_status as logical exceptions for auth flows. The pattern is predictable and uniform.
22 tools is on the higher end but appropriate for a comprehensive health/activity API covering many distinct data types (sleep, activity, readiness, stress, HR, etc.). Each tool maps to a unique resource, and the count feels justified rather than bloated.
The server covers a wide range of Oura data: daily scores and contributors, detailed periods, workouts, sessions, tags, rest mode, personal info, ring hardware, and auth status. It also includes a convenient summary tool and a generic document retriever. For a read-focused API, there are no obvious gaps for typical agent use cases.
Maintenance
Related MCP Connectors
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Connect your Oura Ring account securely in minutes. Enable authorized access to your sleep, activi…
Connect your Oura Ring account and enable access to your wellness data in apps and automations. In…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntegrates Oura Ring health data with Claude Desktop, providing resources, tools, and advanced analytics for sleep, activity, readiness, and health trends.1-
- AlicenseAqualityBmaintenanceProvides read-only access to Oura ring biometrics via the Oura API, enabling Claude to query daily summaries, sleep, readiness, stress, workouts, baselines, and heart rate data. Designed to complement a Strava connector for joint analysis of training and recovery.8MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to access and query Oura Ring health data including sleep, activity, readiness, heart rate, and more via the Oura API.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude Desktop and Claude Code to access your personal Oura Ring health data—including sleep, readiness, activity, heart rate, and workouts—through local MCP tools.7 npmMIT