Oura MCP by usefulapi
Server Details
Read sleep, readiness, activity, stress, heart rate and workouts from the Oura Ring.
- Status
- Healthy
- Uptime
- 49.2% over 19 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 10 tools
Most tools have clearly distinct purposes (webhook CRUD/renew, list vs get document). The main ambiguity is why heartrate, ring_battery_level, and personal_info get dedicated getters while dozens of other collections are read via oura_list_documents, which could make an agent second-guess which tool to use for a given collection.
Every tool follows a uniform oura_verb_noun snake_case pattern (oura_create/delete/get/list/renew_...), with no style drift. The convention is fully predictable.
10 tools is well-scoped for a read-and-webhook API wrapper, with each tool earning its place (5 webhook lifecycle tools and 5 data-read tools). Nothing feels redundant or missing at the count level.
Webhook lifecycle (create/get/list/delete/renew) is fully covered, and document listing/getting plus special collections cover the read surface. Minor gap: no explicit webhook update for changing callback URL/event type, and some collections are only reachable through the generic list tool.
Available Tools
10 toolsoura_create_webhook_subscriptionCreate a webhook subscriptionADestructiveInspect
Register a webhook so Oura notifies your callback URL when data changes. Oura verifies the URL before activating it, and the subscription EXPIRES — renew it with oura_renew_webhook_subscription. Oura: POST /v2/webhook/subscription.
| Name | Required | Description | Default |
|---|---|---|---|
| data_type | Yes | Which collection to watch, e.g. daily_sleep or workout. | |
| event_type | Yes | Which change to be notified about. | |
| callback_url | Yes | The HTTPS URL Oura should call. | |
| verification_token | Yes | A secret Oura echoes back so you can verify the callback. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: Oura verifies the callback URL before activation, and the created subscription expires and must be renewed. These are non-obvious lifecycle facts an agent needs. It does not explain why destructiveHint=true or what state is created, but the annotations carry the safety profile and the description adds meaningful process detail.
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?
Three tight sentences, front-loaded with the primary action, followed by the two operational caveats (verification, expiry) and the endpoint. Every sentence earns its place with no 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?
With no output schema, the description should ideally note what the agent gets back (e.g., a subscription id needed later by renew/delete), which it omits. Otherwise it covers activation flow and expiry adequately for a 4-parameter, all-required creation 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%, with each of the four parameters (callback_url, verification_token, event_type, data_type) already documented and an enum on event_type. The description adds no syntax or format detail beyond the schema, 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?
States a specific verb and resource ('Register a webhook so Oura notifies your callback URL when data changes'), clearly distinct from the sibling renew/delete/get/list subscription tools. The underlying endpoint (POST /v2/webhook/subscription) reinforces exactly what is being created.
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?
Explicitly names the alternative and lifecycle step: 'the subscription EXPIRES — renew it with oura_renew_webhook_subscription', which routes the agent to the correct sibling for the follow-up action. It lacks explicit when-not-to-use guidance (e.g., don't re-create an existing subscription), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_delete_webhook_subscriptionDelete a webhook subscriptionADestructiveInspect
Remove a webhook subscription. Notifications stop immediately. Oura: DELETE /v2/webhook/subscription/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| subscription_id | Yes | The subscription to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description adds real behavioral context beyond that: the concrete side effect that notifications cease immediately after the call. That is a meaningful consequence an agent should weigh before invoking. It stops short of saying whether the operation is idempotent or what happens if the subscription id does not exist.
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?
Three compact sentences with zero filler; the action and the key consequence are front-loaded before the endpoint reference. 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 one-parameter destructive tool with no output schema, the description covers action, effect, and endpoint binding, which is nearly everything an agent needs. Minor residual gaps are error behavior (unknown id) and idempotency, which are not disclosed.
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 a single documented parameter ('The subscription to delete.'), so the schema already carries the parameter meaning. The description adds only the path-template hint {id}, which reinforces but does not extend 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?
States a specific verb ('Remove') and resource ('webhook subscription'), and the endpoint mapping (DELETE /v2/webhook/subscription/{id}) confirms the operation unambiguously. It does not explicitly name sibling tools like oura_renew_webhook_subscription to differentiate, but the action verb is distinct enough from create/get/list 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?
Usage is implied by the effect statement 'Notifications stop immediately,' which tells the agent the intent behind calling it. However, there is no explicit when-to-use vs. when-not, and no mention of the alternative oura_renew_webhook_subscription for cases where the agent may simply want to extend rather than delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_get_documentGet one documentARead-onlyInspect
Fetch a single document by id from one collection. Ids come from oura_list_documents. Oura: GET /v2/usercollection/{collection}/{document_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| sandbox | No | Read Oura's synthetic sandbox data instead of the wearer's real data. Use this to learn a response shape without a ring. | |
| collection | Yes | Which collection the document belongs to. | |
| document_id | Yes | The document's id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the underlying REST mapping (GET /v2/usercollection/{collection}/{document_id}), which clarifies the path structure, but discloses nothing about error behavior for invalid ids, missing documents, or the sandbox flag's effect.
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?
Three short sentences, zero filler, with the core action stated first and the id-prerequisite and endpoint mapping following. 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 read-only single-resource fetch with no output schema, the description plus annotations and full schema coverage give an agent enough to invoke it correctly. It could optionally note the sandbox alternative or empty-result behavior, but nothing essential 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 collection, document_id, and sandbox (including the enum's 16 values). The description only restates that the id belongs to one collection and implies the path template; it adds no new syntax or format detail, so baseline 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?
States a specific verb and resource ('Fetch a single document by id from one collection') and explicitly distinguishes itself from the sibling oura_list_documents by naming it as the id source. An agent can separate this single-fetch tool from the list tool without opening either 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?
Explicitly tells the agent where the required id comes from ('Ids come from oura_list_documents'), which is the key prerequisite for calling this tool. It stops short of stating when-not to use it (e.g., bulk retrieval), so it is strong context without full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_get_heartrateGet heart-rate samplesARead-onlyInspect
Fetch individual heart-rate samples over a DATETIME range. This collection is sampled continuously, so it uses start_datetime/end_datetime rather than dates, and can return a great many points — narrow the window or pass latest. Oura: GET /v2/usercollection/heartrate.
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | Return only the most recent sample. | |
| sandbox | No | Read Oura's synthetic sandbox data instead of the wearer's real data. Use this to learn a response shape without a ring. | |
| next_token | No | Cursor from the previous page's next_token. Omit for the first page. | |
| end_datetime | No | ISO-8601 end. | |
| start_datetime | No | ISO-8601 start, e.g. 2026-08-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe read (readOnlyHint=true), so the description's added value is the volume warning: the collection is sampled continuously and 'can return a great many points,' which implies pagination pressure and motivates narrowing the window or using latest. It stops short of describing pagination mechanics or response shape, but it goes meaningfully beyond the annotations.
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?
Three sentences, zero filler, and the core action plus temporal scope is front-loaded. The volume caution and the parameter rationale each earn their place, and the endpoint reference is a compact trailing tag.
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-only, fully schema-documented tool with no output schema, the description covers purpose, scope, volume behavior, and mitigation. The only unaddressed area is return format and pagination mechanics, which is largely covered by the next_token description in the schema, so nothing essential 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 each of the five parameters is already documented in the schema, establishing a baseline of 3. The description adds only the rationale for why start/end datetimes are used instead of dates, and hints that latest is the shortcut for small windows, which is marginal added value.
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 and resource ('Fetch individual heart-rate samples') plus the temporal scope ('over a DATETIME range'), and cites the underlying endpoint GET /v2/usercollection/heartrate. No sibling tool covers heart-rate data, so the purpose is unambiguous against the rest of the toolset.
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?
Gives actionable guidance ('narrow the window or pass latest') and explains why the datetime parameters exist for this collection vs date-based siblings. It does not name a specific alternative tool or state when not to call it, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_get_personal_infoGet personal infoARead-onlyInspect
Fetch the wearer's profile — age, weight, height, biological sex and email. Oura: GET /v2/usercollection/personal_info.
| Name | Required | Description | Default |
|---|---|---|---|
| sandbox | No | Read Oura's synthetic sandbox data instead of the wearer's real data. Use this to learn a response shape without a ring. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe, non-destructive read, so the description only needs to add context. It usefully lists the returned profile fields, but says nothing about auth requirements, rate limits, or whether the data is scoped to the authenticated wearer.
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?
One sentence with the return fields front-loaded, followed by the bare endpoint reference for traceability. No filler, no repetition of the title.
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 single-parameter, read-only fetch with no output schema, listing the returned fields in prose compensates well for the missing return structure. Only minor gaps remain, such as the absence of any note on authentication or whether sandbox and real data are shaped identically.
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 single 'sandbox' parameter is thoroughly documented in the schema itself. The description mentions no parameters, which is acceptable given the schema does the heavy lifting, 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?
States a specific verb and resource ('Fetch the wearer's profile') and enumerates the returned fields, so an agent knows exactly what it retrieves. It does not explicitly contrast itself with siblings, but the resource is distinct from the webhook, document, heartrate and battery tools, so ambiguity is low.
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?
Usage is only implied by the resource name — there is no statement of when to reach for this tool versus oura_get_heartrate or other read tools, nor any prerequisites. For a zero-argument read it is adequate, but nothing is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_get_ring_battery_levelGet ring battery levelARead-onlyInspect
Fetch ring battery readings over a DATETIME range, or just the latest. Oura: GET /v2/usercollection/ring_battery_level.
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | Return only the most recent reading. | |
| sandbox | No | Read Oura's synthetic sandbox data instead of the wearer's real data. Use this to learn a response shape without a ring. | |
| next_token | No | Cursor from the previous page's next_token. Omit for the first page. | |
| end_datetime | No | ISO-8601 end. | |
| start_datetime | No | ISO-8601 start. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered; the description usefully adds that the operation is scoped to a datetime window or a latest-reading mode. It does not disclose auth requirements, rate limits, or what happens when the range is empty, so it adds only modest context beyond the annotations.
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 short sentences, front-loaded with the capability and followed by the endpoint mapping. No filler and nothing redundant.
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?
There is no output schema, so the description carries some burden for return semantics, yet it never says what a reading contains (battery percentage, charging state, timestamp) or how next_token paging behaves. For a simple read-only tool this is usable but leaves a clear gap.
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 every parameter (latest, sandbox, next_token, start/end_datetime) is already documented in the schema. The description echoes the range-vs-latest distinction but adds no format, mutual-exclusion, or default-value detail beyond the schema. Baseline 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?
States a specific verb (Fetch) and resource (ring battery readings), scoped to a DATETIME range or the latest reading, and even names the underlying endpoint (GET /v2/usercollection/ring_battery_level). An agent can distinguish this from sibling reads like oura_get_heartrate or oura_get_personal_info without opening the 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 'or just the latest' implies when to use the single-reading mode, but there is no explicit when-to-use/when-not guidance, no mention of the sandbox flag's purpose here, and no discussion of paging through results. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_get_webhook_subscriptionGet one webhook subscriptionARead-onlyInspect
Fetch a single webhook subscription with its callback URL, event type and expiry. Oura: GET /v2/webhook/subscription/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| subscription_id | Yes | The subscription's id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read. The description adds useful context by naming the returned fields, but does not cover failure behavior (e.g. unknown id) or that expiry is a renewal deadline. Adequate for a simple read tool with annotations already covering the safety profile.
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 compact sentences with the purpose front-loaded and no padding. The trailing API endpoint reference ('Oura: GET /v2/webhook/subscription/{id}') is mildly redundant but useful for traceability.
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 one-parameter read tool with annotations and no output schema, the description conveys purpose and the shape of the returned data. Only error/expiry semantics are absent, which is minor here.
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 there is only one parameter ('subscription_id', described as 'The subscription's id.'). The description adds nothing beyond restating the id via the endpoint template, so the baseline 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?
States a specific verb (fetch) and resource (a single webhook subscription) and enumerates key returned fields (callback URL, event type, expiry). The word 'single' implicitly distinguishes it from oura_list_webhook_subscriptions, but no sibling is named explicitly.
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?
Usage is implied rather than stated: fetching one subscription by id. No when-to-use conditions, no mention of the list or renew/delete alternatives, and no prerequisites (e.g. needing a valid subscription_id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_list_documentsList documents from a collectionARead-onlyInspect
List documents from one Oura collection over a date range. This is the main read: pick collection for what you want — daily_sleep and sleep for sleep, daily_readiness for recovery, daily_activity for movement, daily_stress and daily_resilience for load, workout and session for exercise, daily_spo2, daily_cardiovascular_age and vO2_max for cardiovascular measures, tag and enhanced_tag for the wearer's own annotations, rest_mode_period and ring_configuration for device state. Oura: GET /v2/usercollection/{collection}.
| Name | Required | Description | Default |
|---|---|---|---|
| sandbox | No | Read Oura's synthetic sandbox data instead of the wearer's real data. Use this to learn a response shape without a ring. | |
| end_date | No | End of the range, YYYY-MM-DD. | |
| collection | Yes | Which document collection to read. | |
| next_token | No | Cursor from the previous page's next_token. Omit for the first page. | |
| start_date | No | Start of the range, YYYY-MM-DD. Defaults to a recent window. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safe-read profile, so the description only needs to add context beyond that. It adds the endpoint and the collection taxonomy but says nothing about pagination behavior, range defaults, or rate limits beyond what the schema's next_token/start_date descriptions already state.
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 sentences, front-loaded with the core action and the selection guidance, ending with the endpoint. The long collection enumeration is dense but every clause earns its place by disambiguating the required parameter.
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-only list tool with 100% schema coverage and no output schema, the description covers purpose, collection selection, and the endpoint. Return-value shape and pagination semantics are left entirely to the schema, which is acceptable given there is no output schema to explain.
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 baseline is 3. The description goes beyond the raw enum by grouping values semantically ('daily_sleep and sleep for sleep, daily_readiness for recovery, daily_activity for movement'), which genuinely helps the agent choose the right collection rather than parsing a flat 16-value enum.
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?
Starts with a specific verb+resource ('List documents from one Oura collection over a date range') and explicitly positions itself as 'the main read,' distinguishing it from the singular oura_get_document sibling. The endpoint mapping (GET /v2/usercollection/{collection}) reinforces the exact operation.
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?
'This is the main read' gives clear context for when to reach for this tool, and the collection-by-goal mapping tells the agent which value to pick for sleep, recovery, movement, load, etc. It lacks an explicit when-not / named-alternative statement (e.g., deferring to oura_get_document for a single item), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_list_webhook_subscriptionsList webhook subscriptionsARead-onlyInspect
List the webhook subscriptions registered for the application. Oura: GET /v2/webhook/subscription.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds only the underlying REST endpoint, with no pagination, auth, or result-shape details, so the annotation is doing most of the behavioral work.
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 short sentences, purpose front-loaded, with the endpoint reference as a compact secondary detail. Nothing is wasted or redundant.
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-parameter, read-only list operation with annotations and no output schema, the description is sufficient to call it correctly. It could optionally note the returned collection, but nothing essential 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?
The tool takes zero parameters and schema coverage is 100%, so there is no parameter semantics for the description to compensate for. Baseline for a parameterless tool is 4.
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?
Uses a specific verb+resource ('List the webhook subscriptions registered for the application'), making the scope clear. The plural 'subscriptions' implicitly distinguishes it from the singular oura_get_webhook_subscription sibling, though it does not name alternatives explicitly.
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?
Gives no when-to-use guidance, no preconditions, and does not mention oura_get_webhook_subscription or the create/delete/renew siblings as alternatives. The list-vs-get distinction is left for the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oura_renew_webhook_subscriptionRenew a webhook subscriptionADestructiveInspect
Extend a webhook subscription's expiry. Oura subscriptions lapse if not renewed, so this is the tool that keeps a live integration alive. Oura: PUT /v2/webhook/subscription/renew/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| subscription_id | Yes | The subscription to renew. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply destructiveHint=true, and the description is consistent with that mutation semantics. It adds the useful context that expiry lapses without renewal, but does not disclose what the renewal overwrites, whether the original expiry is replaced or extended cumulatively, or any auth/rate-limit constraints. Adequate but not rich beyond the annotation.
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?
Three tight sentences, zero filler: purpose first, rationale second, endpoint reference last. Every sentence earns its place and nothing is buried.
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 one-parameter mutation with an annotation covering the safety profile and no output schema, the description gives enough to invoke correctly. It could say a bit more about what a successful renewal returns or the new expiry window, but the essentials are present.
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?
Single parameter with 100% schema description coverage, so the schema already documents subscription_id fully. The description adds only the framing that the ID refers to the subscription being extended, which is marginal over the schema. Baseline 3 when structured fields carry the parameter burden.
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 (renew/extend) and resource (webhook subscription's expiry), and even names the exact API endpoint PUT /v2/webhook/subscription/renew/{id}. An agent can distinguish this from create/delete/get/list subscription siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for use: subscriptions lapse if not renewed, so this keeps a live integration alive. That tells the agent when this tool matters, but it never explicitly contrasts with the create/delete subscription siblings or states what happens if renewal is skipped entirely (e.g., subscription dies).
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.
10 tool updates
- Changed
oura_create_webhook_subscription1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_delete_webhook_subscription1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_get_document1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_get_heartrate1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_get_personal_info1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_get_ring_battery_level1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_get_webhook_subscription1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_list_documents1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_list_webhook_subscriptions1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oura_renew_webhook_subscription1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
10 tool updates
- First observed
oura_create_webhook_subscription - First observed
oura_delete_webhook_subscription - First observed
oura_get_document - First observed
oura_get_heartrate - First observed
oura_get_personal_info - First observed
oura_get_ring_battery_level - First observed
oura_get_webhook_subscription - First observed
oura_list_documents - First observed
oura_list_webhook_subscriptions - First observed
oura_renew_webhook_subscription
Related MCP Connectors
Read WHOOP recovery, sleep, cycles, workouts and body measurements.
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
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
- AlicenseNot gradedqualityBmaintenanceProvides read-only access to Oura Ring health and activity data, including sleep, readiness, activity, stress, SpO2, resilience, workouts, sessions, and heart rate via the Oura API v2.25 PyPIMIT
- 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.120 npmMIT
- 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
- 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.6116MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.