oura-mcp-local
Click on "Install 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-localHow did I sleep last night? Include readiness and HRV."
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-local
A small, read-only MCP server for the Oura API v2. It returns pre-shaped physiology — nights, chronotype, temperature shifts, baseline drift — and leaves interpretation to whatever is calling it.
OAuth2 authorization-code flow with PKCE and a state check; local callback on a
*.localhostname (both loopback addresses).Client secret and tokens live in
~/.oura-mcp-local/with0600permissions. Tokens are never printed.api.ouraring.comandcloud.ouraring.comare the only hosts in the code.Scopes requested:
daily heartrate tag spo2 stress(stress is its own scope on the app form and gatesdaily_stress). Nopersonal, noemail, no workouts.Single dependency:
@modelcontextprotocol/sdk(pluszod, which it needs).Date ranges capped at 366 days; HR curves at 31 days.
Tools
Tool | Answers |
| Is it connected, which scopes, when does the token expire. No health data. |
| The night before a timed event: bedtime, wake, duration, lowest HR and when, hours awake at the event, hours since HR trough, sleep vs 30-day median, readiness, temperature deviation. |
| Median/IQR bedtime, wake, midpoint; weekday vs weekend; regularity; midpoint shift vs ~03:30 reference; day-by-day phase series. |
| Per-night summaries; optional 5-min HR curve. |
| Sustained nightly-temperature shift detector: shift day, elevated-phase mean, amplitude, duration, extension flag. Raw series and parameters returned. |
| Compact daily table: readiness, sleep score, activity, steps, stress, SpO2, lowest HR, HRV, temperature. |
| User-entered tags. |
| Recent nights vs baseline for lowest HR, avg HR, HRV, respiratory rate, temperature; deltas, z-scores, flags. |
| CSVs (sleep, daily, temperature, tags) into a directory under your home folder. |
Related MCP server: Oura Ring MCP Server
Setup
Register an application at https://cloud.ouraring.com/oauth/applications. Redirect URI:
https://oura.localhost:3000/callback. Why that name: Oura's form requires https and rejects IP literals, and its identity server's firewall then blocks any redirect containinghttps://localhost("Request blocked"). A subdomain of.localhostpasses the firewall and resolves to loopback on macOS, systemd-resolved Linux and modern browsers without a hosts entry. Any*.localhostname works; the server always binds loopback only.Build and configure:
git clone https://github.com/ktortti/oura-mcp.git && cd oura-mcp npm ci && npm run build node dist/index.js init # asks for client ID and secret (secret hidden); writes ~/.oura-mcp-local/config.json node dist/index.js auth # opens the Oura consent page; tokens saved to ~/.oura-mcp-local/tokens.json # Oura requires an https redirect. The callback runs on a self-signed cert for the redirect hostname (generated once with # openssl into ~/.oura-mcp-local/). If the browser warns, choose Advanced → Proceed. If it refuses outright, # copy the full URL from the address bar (it contains code=...) and paste it into the terminal. node dist/index.js statusRegister with Claude Code (no secrets in the MCP config):
claude mcp add --scope user oura -- node "$(pwd)/dist/index.js" serveRestart the app;
claude mcp listshould showoura.First query:
oura_event_contextfor a recent date and a clock time. Check the bedtime, wake and lowest-HR time against the Oura app for the same night.
Archive (full-fidelity, local)
node dist/index.js archive ~/oura-data 2026-01-01 2026-12-31Pulls every collection the token can read (sleep, daily sleep/readiness/activity/stress/SpO2/resilience, sleep_time, rest_mode_period, enhanced_tag) plus the daytime 5-minute heart-rate series, and writes raw/<endpoint>.json untouched alongside flattened CSVs: nights.csv, sleep_hr_curves.csv and sleep_hrv_curves.csv (one row per 5-minute sample per night), heartrate.csv, and one CSV per daily endpoint. The MCP tools remain the query layer; the archive is for keeping your own copy and for analysis outside a model's context.
Notes
Oura refresh tokens are single-use. Several server processes (one per Claude Code session, say) can share the token file: refresh happens under a lock file (stale after 2 min and only if the owning process is gone), and a process re-reads the file before spending its own refresh token, so a sibling's refresh is adopted rather than raced.
Access tokens are refreshed automatically a minute before expiry and on a 401. Requests retry up to three times on 429 (honouring
Retry-After), 5xx and network errors, with at most four in flight at once. Pagination is capped at 50 pages and rejects a repeated token.oura_exportonly writes under your home directory: lexical check, realpath of the existing ancestor before anything is created, realpath again after, andO_NOFOLLOWon each file open. This is best-effort containment for local use — it defeats mistakes and pre-existing symlinks, not a hostile process on the same machine racing the checks.Responses are validated against minimal zod schemas per endpoint; an unexpected shape fails with the endpoint and field named rather than producing misleading numbers.
To revoke: delete
~/.oura-mcp-local/tokens.jsonand remove the app's access at cloud.ouraring.com.Set
OURA_MCP_HOMEto relocate the config directory (tests and sandboxes).npm testcovers the analysis functions (synthetic data), the API client (scriptedfetch: pagination guards, validation, retries, refresh and cross-process refresh), export path containment (including symlink escape) and the lock file.npm run lintandnpm run typecheckare what CI runs.
Available Tools
9 toolsoura_baseline_driftA
Baseline drift: nightly lowest HR, average HR, HRV, respiratory rate and temperature deviation over the last window nights vs the preceding baseline, with deltas, z-scores and flags. Interpretation is left to the caller.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| window | No |
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 discloses the output includes deltas, z-scores, and flags, and states interpretation is left to the caller, indicating it returns raw metrics without analysis. It does not explicitly state whether the operation is read-only or if any side effects exist, though as an analysis tool it is likely safe. Given missing annotations, more explicit behavioral disclosure would be expected.
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 computation, lists the metrics, and closes with an interpretation caveat. It contains no filler or redundant phrases, making it highly 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?
With no output schema and no annotations, the description should detail return format and parameter semantics. It mentions the metrics and flags but not the exact structure of the response. The 'days' parameter remains unexplained, leaving a gap in parameter understanding. For a two-parameter tool, this is a notable incompleteness.
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 has 0% description coverage, so the description must compensate. It explains 'window' as the period over which drift is measured, but does not define 'days', which likely represents the baseline period. The agent is left to guess the meaning and relationship of 'days' to the window, creating ambiguity for parameter usage.
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 clearly states the tool computes baseline drift metrics (nightly lowest HR, average HR, HRV, respiratory rate, temperature deviation) over a window vs preceding baseline, with deltas, z-scores, and flags. It distinguishes itself from siblings like oura_sleep_periods (raw data) or oura_temperature_shifts (temperature-specific) by specifying a multi-metric drift analysis. The resource and computation are 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 implies use for analyzing baseline drift but provides no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives or criteria for selecting this tool over siblings. An agent must infer its purpose from context, which is possible but not explicitly supported.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_chronotypeB
Computed chronotype from main sleep periods: median/IQR bedtime, wake and midpoint; weekday vs weekend; regularity (SD of midpoint); midpoint shift vs a ~03:30 population reference; day-by-day phase series (useful across travel).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral transparency burden. It discloses that the tool computes an analysis rather than mutating data level. It also communicates the reference baseline (~03:30) and input source (main sleep periods), which is useful. However, it doesn't address read-only guarantees, data availability, or error conditions, so it only partially covers the 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?
A single dense sentence, front-loaded with the core action ('Computed chronotype from main sleep periods') followed by a useful list of output components. No filler or redundancy.
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 no output schema and no annotations, the description compensates by enumerating the computed metrics and noting a practical use case ('useful across travel'). It does not describe return format or edge-case behavior, but the tool's complexity is modest and the schema fully defines the only parameter.
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 sole parameter, 'days', already has high schema coverage with defaults, min, max, and description. The tool description adds no additional meaning for the parameter beyond the schema, so 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 phrase 'Computed chronotype from main sleep periods' identifies a clear verb-resource relationship and enumerates the derived metrics, distinguishing it as an analytic summary rather than raw sleep data. It doesn't explicitly name sibling tools to differentiate, but the content makes the purpose distinct from oura_sleep_periods and oura_daily.
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 explicit guidance about when to use this tool versus the sibling tools. The only contextual hint is that the day-by-day phase series is 'useful across travel', which implies a use case but doesn't state exclusions, prerequisites, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_dailyC
Compact daily table: readiness score, sleep score, activity score and steps, stress summary, SpO2 average, nightly lowest HR, average HRV, temperature deviation.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided托, and the description does not disclose whether this is a read-only operation, how date boundaries are handled, or what the returned table structure actually looks like. It mostly restates output metrics rather than explaining tool 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 a single compact, front-loaded sentence with a clear list of metricsches. No filler or redundancy; it efficiently conveys the payload content.
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 tool with no output schema and no annotations, the description does not give enough context for correct invocation. It omits date semantics, parameter meaning, return format, and any edge cases that an agent would need to know.
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 schema has two required parameters, start and end, but the description never mentions that these are date-range boundaries, what format they expect, or how they affect the table. With 0% schema coverageencyclopedia, the description needed to compensate but did not.
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 a daily Oura summary table and enumerates the included metrics (readiness, sleep, activity, steps, SpO2, HRV, temperature), so an agent can tell what this endpoint returns. It lacks an explicit verb like 'retrieve' or 'list', but the resource and content are 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?
There is no guidance on when to use this tool instead of siblings like oura_status, oura_temperature_shifts, or oura_export. The word 'daily' implies a date-related use case, but the description does not explain scope, filtering, or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_event_contextA
Sleep and physiology context for a timed event on a given day (a test, a flight, a race): the preceding night (bedtime, wake, duration, lowest HR and when), hours awake at the event, hours since the nightly HR trough, sleep vs 30-day median, readiness and temperature deviation.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Event date, YYYY-MM-DD | |
| time | Yes | Local clock time of the event, HH:MM |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It does well, listing the exact physiology and sleep metrics it computes: preceding night's bedtime, wake time, duration, lowest HR, hours awake at the event, hours since HR trough, sleep vs 30-day median, readiness, and temperature deviation. It does not mention side effects, but the tool appears read-only; the main missing piece is edge-case behavior such as absence of prior 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 sentence with a front-loaded purpose ('Sleep and physiology context for a timed event on a given day') followed by a colon-separated list of output dimensions. It is compact and information-dense, with each clause reinforcing the tool's utility. The event examples are short and illustrative, not padding.
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 there is no output schema, the description must cover return values, and it does provide an enumerated list of outputs. However, it does not describe the output structure (e.g., object shape, units, or exact field names) nor how to handle edge cases like an event before bedtime or missing sleep data. It is a reasonable overall picture, but several runtime details for consuming the result remain absent.
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 semantic baseline is 3. The description adds value beyond the schema by explaining how date and time are used together, framing them as the event anchor against which metrics like 'hours awake at the event' and 'hours since the nightly HR trough' are computed. This goes beyond the schema's simple 'event date' and 'local clock time of the event'.
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's purpose: it returns sleep and physiology context for a timed event on a given day, and gives concrete examples (test, flight, race). It is not a tautology and names the domain resource. However, it does not mention how it differs from sibling tools like oura_daily or oura_sleep_periods, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it via examples like 'a test, a flight, a race' and by emphasizing the 'timed event' angle. It does not explicitly state when NOT to use it or compare with alternative sibling tools, so the guidance is inferential rather than prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_exportB
Write CSVs (sleep, daily, temperature, tags) for a date range into a directory under your home folder. Local disk only.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | Target directory under your home folder, e.g. ~/oura-data | |
| end | Yes | ||
| start | 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 state the main side effect—writing local files—and restricts scope to local disk, which is valuable, but it does not say whether existing files are overwritten, whether the directory must exist, or what the tool returns.
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, front-loaded sentences with no filler. Every part contributes useful information: data type coverage, date range scope, output destination, and the local-disk boundary.
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 no output schema, no annotations, and minimal start/end descriptions, the tool is not fully specified. An agent still cannot know the expected date format, whether files or directories are created/overwritten, or how success is indicated.
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 only 33%, but the description does not compensate for the undocumented start/end parameters. It adds only the generic idea of a date range and otherwise restates what the schema says about the target directory.
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 explicitly states a concrete action and output: writing CSVs for specific data types (sleep, daily, temperature, tags) into a local directory for a date range. The local-disk-only qualifier clearly separates it from the sibling data-query tools like oura_daily and oura_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?
No guidance is given about when to use this export tool versus the named sibling tools. The reader can infer the export use case, but there are no explicit alternatives, exclusions, or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_sleep_periodsB
Per-night summaries (main sleep and naps): bedtime, wake, midpoint, hours, efficiency, latency, lowest HR and its time, average HR/HRV/respiratory rate, temperature deviation. Optional 5-min HR curve (limits range to 31 days).
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| main_sleep_only | No | ||
| include_hr_curve | No |
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 burden. It does disclose an important limitation (optional HR curve limits range to 31 days) and summarizes output fields. However, it does not mention timezone handling, whether naps are merged with main sleep by default, or other operational behaviors.
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, followed by a useful parameter-specific caveat. It is a single well-organized block, though the metric list is somewhat long.
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 gives a solid sense of the returned sleep metrics and one important range limitation, but without an output schema or annotations it leaves open how start/end are formatted, whether naps are included by default, and how errors or excessive ranges are handled.
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 minimal: only start and end types exist, with no semantic detail. The description explains the effect of include_hr_curve (5-min curve and 31-day limit), but does not clarify start/end format, main_sleep_only behavior, or any other parameter constraints.
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 this as a sleep-summary tool listing specific metrics (bedtime, wake, midpoint, HRV, etc.), which makes its purpose obvious. It does not explicitly contrast itself with sibling tools, but the content is specific and distinguishable enough.
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 for when to use this tool versus alternatives, and no exclusions are stated. The agent must infer usage solely from the title and metric list; only the HR-curve date-range limitation provides any contextual constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_statusA
Connection status: token expiry, granted scopes, whether the local config and token files exist and are private. Returns no health data and no absolute paths.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully convey behavior. It does transparently describe the output (scopes, expiry, file existence/private) and explicitly reports what it will not return, providing good transparency. It doesn't explicitly say the tool is read-only, but the status‑checking nature and local file references (already imply no side effects on remote systems), which is acceptable given the coverage.
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 one tightly worded sentence that front‑loads the primary concept ('Connection status') and then enumerates precisely what is inspected and what is excluded. No filler is present; each clause 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, no‑output‑schema status tool, the description is complete. It tells the agent exactly the kind of information it will receive and explicitly what it will never return, which is all an agent needs to correctly invoke and interpret the tool's results.
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 and an empty input schema, so there is nothing for the description to clarify about parameters. The baseline of 4 applies because no parameter documentation is needed; the description instead focuses entirely on the tool's purpose and 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 clearly states the tool's function ('Connection status') and lists its exact outputs (token expiry, granted scopes, local config/token file existence and privacy). The explicit exclusions ('Returns no health data and no absolute paths') help distinguish it from sibling tools that return health data, such as oura_daily or oura_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 description doesn't explicitly say 'use this tool when checking the connection before other calls,' but the 'Connection status' label plus the 'Returns no health data' exclusion provides clear context that this tool is for diagnosing the Oura connection, not for retrieving health metrics. This is an implied but unambiguous routing signal to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_tagsD
User-entered tags (e.g. alcohol, travel, illness, custom) with day, times and comments.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | 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 behavioral disclosure. It does not state whether the operation is read-only or mutating, what the return format is, or any side effects. The description only describes the data content, not the 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 a single sentence and concise in length, but it is under-specified rather than concise. It lacks a clear structure or front-loaded action, making it inadequate for guiding tool 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?
For a tool with two required parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain the parameters, the operation, or the response, leaving an agent without sufficient information 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?
The schema has two required parameters, start and end, both strings, with 0% schema description coverage. The description does not mention these parameters at all, nor does it explain their meaning or format. It mentions 'day, times and comments' but that does not map to the start/end parameters.
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 is a noun phrase that describes the content of tags ('User-entered tags...') but does not state an action verb such as 'retrieve', 'list', or 'create'. Without specifying what the tool does, an agent cannot determine its operation. It is not a tautology, but it lacks the explicit verb and resource distinction expected.
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 mention of when to use this tool versus the sibling tools (e.g., oura_status, oura_sleep_periods). No context is given for selecting this tool over alternatives, nor 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.
oura_temperature_shiftsB
Nightly temperature deviation with a sustained-shift detector: baseline mean, shift day, elevated-phase mean, amplitude, duration, and a flag when the current elevation has outlasted the expected duration. Heuristic; parameters exposed and the raw series returned so the decision is auditable.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| threshold | No | °C above baseline mean to count as elevated | |
| confirm_days | No | Consecutive days required above threshold | |
| baseline_days | No | Days before a candidate shift used as baseline | |
| expected_elevated_days | No | Expected length of an elevated phase; the flag fires beyond this + 2 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions the tool is heuristic and returns the raw series for auditability, which adds useful context. However, it does not state whether the operation is read-only, whether it has side effects, or any limitations (e.g., data availability, permissions). The heuristic disclosure and raw-series return are positive, but the description falls short of fully characterizing 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 a single, information-dense sentence that front-loads the core purpose and lists key outputs and the auditability feature. There is no redundant wording or filler; every clause adds value. The structure is clear and efficient, making it easy for an agent to grasp the tool's function quickly.
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 six parameters and no output schema, the description provides a high-level overview but lacks details on the return structure, the exact meaning of 'sustained shift', and how the parameters influence the detection. It mentions the flag condition but not the precise algorithm. An agent could invoke the tool with reasonable confidence but would lack full understanding of the expected output and edge cases, making the description moderately complete but not comprehensive.
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 67%: start and end lack descriptions, while the other four parameters have descriptions. The tool description does not clarify start and end beyond their type, nor does it explain how parameters like threshold or confirm_days map to the detection logic. It references baseline mean and elevated phase but does not tie these to the parameters, so the description fails to compensate for the schema gaps.
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 a specific verb ('detect') and resource ('nightly temperature deviation') with a defined purpose: a sustained-shift detector. It enumerates the outputs (baseline mean, shift day, elevated-phase mean, amplitude, duration, flag) and distinguishes itself from siblings by focusing on temperature shifts rather than status, events, or baseline drift. The purpose is unambiguous and specific.
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 no explicit guidance on when to use this tool versus alternatives like oura_baseline_drift or oura_status. It implies usage for detecting temperature shifts, but does not state conditions for selection, prerequisites, or when not to use it. An agent would have to infer applicability from the purpose alone, which is weak for a tool with many siblings.
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.
9 tool updates
v0.3.0- First observed
oura_baseline_drift - First observed
oura_chronotype - First observed
oura_daily - First observed
oura_event_context - First observed
oura_export - First observed
oura_sleep_periods - First observed
oura_status - First observed
oura_tags - First observed
oura_temperature_shifts
TDQS
Scored across 9 tools
Most tools have clearly distinct purposes (status, event context, chronotype, sleep periods, temperature shifts, daily summary, tags, drift, export). Some metric overlap exists between sleep_periods, daily, and baseline_drift (HRV, lowest HR, temperature deviation), but descriptions clarify the analytical intent.
All tools share the consistent 'oura_' prefix and snake_case style. Most are descriptive nouns (oura_sleep_periods, oura_temperature_shifts), but 'oura_export' breaks the noun pattern with a verb, and 'oura_daily' is an adjective, creating minor inconsistency.
Nine tools is a well-scoped set for a health-data server covering status, sleep, readiness, temperature trends, tags, and export. Each tool earns its place without feeling bloated or thin.
The core Oura data surface is covered: sleep summaries, daily scores, temperature, tags, drift analysis, and CSV export. Minor gaps exist (no detailed sleep stages, no workout/activity session breakdown), but agents can accomplish most wellness workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
- freddyOAuthcoach.freddy
Connect your wearables, rings and training apps, then ask your AI about your own health data.
- SomviaOAuthapp.somvia
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
Related MCP Servers
- AlicenseBqualityCmaintenanceProvides access to Oura Ring health data including sleep, readiness, and resilience metrics through the Oura API, enabling language models to query and analyze personal health information.6115MIT
- AlicenseNot gradedqualityDmaintenanceEnables access to Oura Ring health data including sleep patterns, activity metrics, readiness scores, heart rate, workouts, and stress measurements with AI-powered analysis and personalized recommendations.51MIT
- AlicenseNot gradedqualityDmaintenanceProvides LLMs with access to Oura Ring health data including sleep metrics, activity tracking, heart rate, readiness scores, and other wellness insights through the Oura API v2.MIT
- AlicenseAqualityAmaintenanceProvides read-only access to Withings health metrics including body composition, sleep, workouts, and ECG data with local SQLite caching and trend analysis. Features incremental synchronization, automatic OAuth token refresh, and supports all 200+ Withings measurement types for comprehensive health tracking.8GPL 3.0