Eight Sleep MCP
This server provides a local-first MCP interface to Eight Sleep sleep data and control, keeping credentials local.
Read / Monitor
Profile & devices: get authenticated user, user profile, assigned device/bed side (
eight_sleep_get_me,eight_sleep_get_user,eight_sleep_get_current_device)Sleep trends: fetch nightly sessions and scores for a date range (
eight_sleep_get_trends)Temperature program: view heating level, smart schedule, side on/off state (
eight_sleep_get_temperature)Alarms: list configured alarms and recommended next alarm (
eight_sleep_get_alarms)Adjustable base: view leg/torso angles and preset (
eight_sleep_get_base)
Analysis & Workflow
Nightly summary: best/worst night, mean score, nights under 70/over 85 across up to 30 nights (
eight_sleep_nightly_summary)Sleep efficiency: per-night percentage, classification, mean/median, observations (
eight_sleep_efficiency)Temperature trend: correlate temperature settings with sleep scores (
eight_sleep_temperature_trend)Wellness context: normalized delx-wellness-context/v1 payload for cross-tool handoff (
eight_sleep_wellness_context)
Write / Control (requires explicit opt-in via EIGHT_SLEEP_ALLOW_MUTATIONS=true or --allow-mutations)
Set temperature (-100 to 100, optionally duration) (
eight_sleep_set_temperature)Turn side on/off (
eight_sleep_set_side)Toggle away mode (
eight_sleep_set_away_mode)Snooze/dismiss active alarms (
eight_sleep_snooze_alarm,eight_sleep_dismiss_alarm)
Configuration, Privacy & Discovery
Connection status, privacy audit, cache status (
eight_sleep_connection_status,eight_sleep_privacy_audit,eight_sleep_cache_status)Manage shared Delx Wellness profile and onboarding (
eight_sleep_profile_get,eight_sleep_profile_update,eight_sleep_onboarding)Logout to delete local tokens (
eight_sleep_logout)Discovery: data inventory, capabilities, agent manifest for client integration (
eight_sleep_data_inventory,eight_sleep_capabilities,eight_sleep_agent_manifest)
Allows AI agents to read and optionally control Eight Sleep pod data such as sleep trends, temperature program, alarms, and adjustable base.
⚡ One-command install with Delx Wellness for Hermes:
npx -y delx-wellness-hermes setup— preconfigures this connector alongside the rest of the wellness catalog.Or wire it standalone into Claude Desktop / Cursor / OpenClaw / any MCP client — see the install section below.
HTTP (v2 stateless)
Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:
npx -y eight-sleep-mcp-unofficial --http
# GET http://127.0.0.1:3000/health
# POST http://127.0.0.1:3000/mcp (sessionless)Env: EIGHT_SLEEP_MCP_HOST, EIGHT_SLEEP_MCP_PORT, EIGHT_SLEEP_MCP_TRANSPORT=http.
Local-first MCP server that connects AI agents to your Eight Sleep pod — sleep sessions, temperature program, alarms, adjustable base — with an explicit mutation gate for write actions.
Unofficial project. Not affiliated with, endorsed by, or supported by Eight Sleep, Inc. Eight Sleep is a trademark of its respective owner. Use this only with your own Eight Sleep account.
Eight Sleep does not publish a stable public API. This package talks to the same private endpoints (auth-api.8slp.net, client-api.8slp.net, app-api.8slp.net) the mobile app uses, following the path well documented by upstream community projects (lukas-clarke/eight_sleep, mezz64/pyEight, steipete/eightctl).
Part of Delx Wellness — a registry of local-first wellness MCP connectors.
If this connector helps your agent workflow, please star the repo. Stars make the project easier for other AI builders to discover and help Delx keep shipping local-first wellness infrastructure.
Related MCP server: Polar MCP
Why this exists
Eight Sleep ships great sleep telemetry — nightly score, presence intervals, tnt, smart-temperature schedule — but it lives inside a closed iOS/Android app with no public API. Bringing it into your agent today means reverse-engineering OAuth, juggling token refresh, normalizing endpoint shapes, and handling timezone quirks.
This package does all of that locally, exposes Eight Sleep through the Model Context Protocol, and lets any MCP-compatible agent read your sleep context (and write pod commands, if you opt in) with one config snippet. Credentials and tokens stay on your machine.
Setup in 60 seconds
npx -y eight-sleep-mcp-unofficial setup # interactive: email + password
npx -y eight-sleep-mcp-unofficial login # persists the auth token
npx -y eight-sleep-mcp-unofficial doctor # verifies you're readyThen add this to your MCP client config:
{
"mcpServers": {
"eight_sleep": {
"command": "npx",
"args": ["-y", "eight-sleep-mcp-unofficial"]
}
}
}For Claude Desktop, run setup --client claude and the snippet is written for you.
Try it with your agent
Three things to ask first:
Use eight_sleep_connection_status to check setup, then run eight_sleep_get_me.
Tell me what device you find.Call eight_sleep_get_trends for the last 7 days, response_format=json.
What's my best night and worst night, and why?Call eight_sleep_get_temperature. Summarize the current smart schedule
(bedtime, initial sleep, final sleep) and tell me if I should tune it.Data availability
This package talks to the Eight Sleep mobile-app API. It does not access continuous biometric sensor streams or BLE.
Data | Tool | Source |
User & device |
|
|
Temperature program |
|
|
Sleep trends |
|
|
Alarms |
|
|
Adjustable base |
|
|
Workflow tools
Tool | What it does |
| Multi-night summary: best night, worst night, mean score, nights under 70 / over 85 — one call instead of post-processing raw |
| Returns a normalized |
Mutation tools (write gate)
Off by default. To enable, re-run setup with --allow-mutations or enable EIGHT_SLEEP_ALLOW_MUTATIONS. Do not put the assignment in default MCP snippets.
Action | Tool |
Set heating level |
|
Turn side on/off |
|
Toggle away mode |
|
Snooze alarm |
|
Dismiss alarm |
|
When the gate is off, mutation tools return an explicit mutations disabled error so agents can detect it and ask the user to opt in.
Privacy
Credentials stored in
~/.eight-sleep-mcp/config.jsonwithchmod 600.Auth tokens stored in
~/.eight-sleep-mcp/tokens.jsonwithchmod 600.Sensitive fields (email, device serial, shipping address, payment last-four) are redacted from tool responses by default.
EIGHT_SLEEP_PRIVACY_MODE:summary— minimal fields only.structured(default) — preserves complete nested sleep fields and future upstream additions while redacting identifiers.raw— full upstream payload (debugging only).
Trend requests validate real YYYY-MM-DD dates, range order and IANA timezone names before any network call.
Call eight_sleep_privacy_audit at any time to inspect the current posture without exposing secrets.
Environment variables
Var | Purpose |
| Account email. |
| Account password. |
| Enable write tools (keep unset in default snippets). |
|
|
|
|
| Override token storage path. |
| Override Android-app credential defaults (advanced). |
Stability
Eight Sleep changes mobile-app endpoints without notice. This connector tracks upstream community projects (lukas-clarke/eight_sleep, steipete/eightctl, mezz64/pyEight) for breakage signals. If a tool starts returning 4xx unexpectedly, check those repos and the project issues for the latest known-good shape.
Credits
lukas-clarke/eight_sleep— Home Assistant integration, most current reference for V2 endpoints.mezz64/pyEight— original Python library; auth + endpoint discovery.steipete/eightctl— CLI variant with extracted client credentials.LiamSnow/opensleep— full open-source firmware (deeper than this MCP goes).
📧 Contact & Support
📨 support@delx.ai — general questions, integration help, partnerships
🐛 Bug reports / feature requests — GitHub Issues
🐦 Updates — @delx369 on X
🌐 Site — wellness.delx.ai
License
MIT — see LICENSE.
Skill or MCP
Same package, two doors. MCP registers tools on stdio/HTTP. The skill can drive the same tools through the CLI when the client has no MCP:
npx -y eight-sleep-mcp-unofficial call eight_sleep_connection_status --json '{}'Copy skill/SKILL.md into your agent skills dir.
Available Tools
26 toolseight_sleep_agent_manifestEight Sleep Agent ManifestBRead-onlyIdempotent
Machine-readable install, runtime and client guidance for AI agents operating the Eight Sleep MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | generic | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| auth | Yes | |
| links | Yes | |
| client | Yes | |
| hermes | Yes | |
| package | Yes | |
| project | Yes | |
| mcp_name | Yes | |
| unofficial | Yes | |
| agent_rules | Yes | |
| mutation_tools | Yes | |
| standard_tools | Yes | |
| troubleshooting | Yes | |
| recommended_first_calls | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds minimal behavioral context beyond that—it frames the tool as providing guidance but does not describe what kind of guidance, whether it is static or dynamic, or any dependencies. It does not contradict the annotations, and the bar is lower because annotations cover the key safety traits.
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 key attribute 'Machine-readable' and quickly lists the content areas: install, runtime, and client guidance. It avoids redundancy and wasted words. It could be slightly more explicit with a verb, but overall it is well-sized.
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 low complexity (2 optional enum parameters) and the presence of an output schema plus annotations, the description is mostly adequate for a simple informational manifest. However, it lacks guidance on how an agent should use this tool in a workflow—e.g., when to call it, how it relates to sibling discovery tools, or what 'operating the Eight Sleep MCP' implies. A bit more context would be needed for first-time agents.
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 0%, so the description must compensate for explaining parameters, but it does not mention client or response_format at all. The parameter names and enums are self-explanatory to some extent (client selects the AI client, response_format selects markdown vs JSON), but no guidance is provided on how to choose them or what effect they have on the returned manifest.
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 tool as a resource for install, runtime, and client guidance for AI agents working with the Eight Sleep MCP. The phrase 'Machine-readable guidance' conveys a specific purpose and differentiates it from data retrieval or mutation tools. However, it lacks a strong imperative verb like 'retrieve' or 'provide,' and it does not explicitly distinguish itself from sibling tools such as eight_sleep_capabilities.
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 like eight_sleep_capabilities or eight_sleep_connection_status. The description does not state that it is the first tool to consult for setup, or that it should not be used for runtime data. An agent would have to infer its role from the title and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_cache_statusEight Sleep Cache StatusARead-onlyIdempotent
Show optional local SQLite cache status. Enable with EIGHT_SLEEP_CACHE=sqlite or EIGHT_SLEEP_CACHE=true.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| enabled | Yes | |
| entries | Yes | |
| newest_cached_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. The description adds behavioral context beyond that: the cache is local SQLite and optional, and it specifies how to enable it. This gives the agent useful operational context without contradicting 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?
The description is two short sentences, with the core action front-loaded and the activation detail right behind it. 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 simple status tool with an output schema and read-only annotations, the description covers the essential context: what the tool shows and how the cache is enabled. A minor omission is not specifying the tool's behavior when the cache is not enabled, but that is likely covered by the output schema.
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 0%, and the description does not mention the single response_format parameter at all. It therefore adds no semantic meaning beyond the enum and default already present in the schema. With low coverage, the description was expected to compensate, but it does 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 opens with 'Show optional local SQLeite cache status', a specific verb and resource that clearly identifies the operation. None of the 24 sibling tools mention cache, so it is immediately distinguishable. The activation hint further clarifies that this tool reports on an optional cache subsystem.
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 states the cache is optional and gives the exact environment variable values that enable it, making it clear when this tool is applicable. It does not provide explicit when-not-to-use guidance or alternatives, but no sibling tool covers cache status, so the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_capabilitiesEight Sleep MCP CapabilitiesARead-onlyIdempotent
Explain supported Eight Sleep data, mutation gate, privacy modes, and project links. Does not call Eight Sleep or expose secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| creator | Yes | |
| project | Yes | |
| mcp_name | Yes | |
| mutations | Yes | |
| auth_model | Yes | |
| unofficial | Yes | |
| api_boundary | Yes | |
| privacy_modes | Yes | |
| supported_data | Yes | |
| contribution_paths | Yes | |
| recommended_agent_flow | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond those hints: it makes no external API call and exposes no secrets, which is meaningful for an agent deciding whether this tool is safe to invoke.
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 covers the tool's purpose and its key safety caveats without wasted words. Every 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 an informational capabilities tool with one optional parameter, strong annotations, and an output schema, the description is complete. It communicates what the tool covers and the absence of side effects; return format details are already supplied by the output schema.
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 only parameter, response_format, is fully specified by the schema through its enum values ('markdown'/'json') and default. The description does not mention the parameter, so it adds no parameter-level guidance, but the schema already carries the semantic load for this optional, self-describing parameter.
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 ('Explain') with concrete subjects: supported Eight Sleep data, mutation gate, privacy modes, and project links. It also distinguishes itself by explicitly saying it does not call Eight Sleep or expose secrets, separating it from the many data/action 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 description frames this as a meta/capabilities tool, so an agent can infer it is for orientation and explanation rather than live operations. It does not explicitly name alternative sibling tools or define when not to use it, so it misses the full explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_connection_statusEight Sleep Connection StatusARead-onlyIdempotent
Check env, local config, token file, Node version, privacy mode and mutation gate. Does not call Eight Sleep or expose secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | generic | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| node | Yes | |
| cache | Yes | |
| token | Yes | |
| client | No | |
| config | Yes | |
| next_steps | Yes | |
| missing_env | Yes | |
| privacy_mode | Yes | |
| required_env | Yes | |
| mutations_enabled | Yes | |
| ready_for_eight_sleep_api | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond annotations by stating the tool does not call Eight Sleep and does not expose secrets, which are important safety traits. It also lists specific local checks, giving the agent a clearer behavioral model without contradicting any 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?
The description is a single sentence that efficiently aggregates all key actions and non-behaviors. It is front-loaded with the verb 'Check' and wastes no words. The negative constraints are embedded concisely, making it easy for an agent to parse 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?
With a rich output schema and strong annotations, the description covers core purpose and safety traits, but it leaves out usage context and parameter semantics. The 'client' parameter is unexplained and the description does not clarify what 'mutation gate' or 'privacy mode' mean in practice. Overall, it is adequate but has clear gaps in guiding an agent on when to use it and how to configure 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 0%, so the description must compensate for parameter meaning. It does not mention 'client' or 'response_format' at all. While the enums and defaults provide some structure, the semantic purpose of the 'client' parameter is left entirely unexplained, and the description offers no help in choosing values or understanding their effect.
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 with the verb 'Check' and enumerates specific resources: env, local config, token file, Node version, privacy mode, and mutation gate. It distinguishes itself from sibling tools by explicitly noting it does not call Eight Sleep or expose secrets, which clarifies it is a local diagnostic rather than an API interaction.
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 for local environment verification and explicitly states it does not call Eight Sleep, but it does not provide explicit when-to-use or when-not-to-use guidance compared to alternatives. Sibling names exist, but no routing logic is given, so the agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_data_inventoryEight Sleep Data InventoryARead-onlyIdempotent
Inventory supported Eight Sleep domains, mutation tools, and recommended first calls. Does not call Eight Sleep APIs.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| links | Yes | |
| notes | Yes | |
| source | Yes | |
| totals | Yes | |
| mcp_name | Yes | |
| mutations | Yes | |
| categories | Yes | |
| unofficial | Yes | |
| first_tools | Yes | |
| api_boundary | No | |
| generated_at | Yes | |
| privacy_modes | Yes | |
| data_access_model | Yes | |
| recommended_agent_flow | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a key behavioral fact beyond the readOnlyHint and idempotentHint annotations: the tool does not call any Eight Sleep APIs. This is valuable because read-only could still imply external calls; the description removes that ambiguity. It also advertises that the tool offers recommendations, which is useful context for the 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?
Two short sentences with no fluff. The primary purpose is front-loaded, and the crucial no-API-call qualifier follows immediately. Every word 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 simple inventory tool with one optional parameter, a full output schema, and annotations declaring it read-only, idempotent, and non-destructive, the description covers everything needed: what it inventories, that it provides recommended first calls, and that it has no external side effects. Nothing material 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 schema description coverage is 0%, and the description does not mention the response_format parameter at all. Although the enum values (markdown/json) and default are self-explanatory, the description provides no guidance about which format to choose or how the parameter affects output, so it fails to compensate for the low 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 ('Inventory') and names the resource: supported Eight Sleep domains, mutation tools, and recommended first calls. It also explicitly distinguishes itself from API-calling siblings by stating 'Does not call Eight Sleep APIs,' making its role as a metadata/inventory tool unmistakable.
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 clearly implies use when an agent needs an overview of supported domains, mutation tools, or recommended starting points. The explicit exclusion 'Does not call Eight Sleep APIs' tells the agent this is not for data retrieval or mutation, though it does not name specific sibling alternatives or provide explicit when-to-use/when-not-to-use language.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_dismiss_alarmDismiss Eight Sleep AlarmADestructive
Dismiss an actively ringing alarm. Gated by explicit_user_intent: true and EIGHT_SLEEP_ALLOW_MUTATIONS=true.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | ||
| alarm_id | Yes | Eight Sleep alarm id from eight_sleep_get_alarms. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Must be true after the user explicitly asked for this write. Combined with EIGHT_SLEEP_ALLOW_MUTATIONS=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| note | No | |
| method | Yes | |
| endpoint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context by disclosing the gating requirements (explicit user intent and the mutation flag), which the agent must verify before invoking, and also warns that it only acts on an actively ringing alarm. It does not contradict the annotations, and the added gating info meaningfully extends what the structured fields alone would tell the 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 terse sentences, front-loaded with the core action followed by the gating constraint. Every clause earns its place and there is no filler or repeated title information.
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 an output schema, safety-relevant annotations, and only four simple parameters, the description covers the essential purpose and invocation prerequisites. What is missing is sibling routing (when to dismiss vs snooze) and the behavioral consequence of dismissing, so the guidance is adequate but has 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 50%, with alarm_id and explicit_user_intent already described in the schema itself. The description reinforces the explicit_user_intent gating condition but adds nothing about user_id or response_format, which remain undocumented in both schema and description. It adds a small amount of meaning beyond the schema but does not fully compensate for the undocumented half of the 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 states a specific verb ('Dismiss') and a clearly scoped resource ('an actively ringing alarm'), so an agent immediately knows the action and its precondition. The action also distinguishes it from the sibling eight_sleep_snooze_alarm by naming a different operation, so no schema inspection is needed for basic 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 gating clause ('Gated by explicit_user_intent: true and EIGHT_SLEEP_ALLOW_MUTATIONS=true') tells the agent the conditions required for the call to succeed, and 'actively ringing' implies when it applies. However, it never explicitly states when NOT to use this tool or points to the sibling snooze_alarm as the alternative for a ringing alarm that should be postponed, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_efficiencyEight Sleep Sleep EfficiencyARead-onlyIdempotent
v0.2.2 — Sleep efficiency calculator. For each of the last N nights (default 7), computes time_in_bed_minutes (from presenceDuration), time_asleep_minutes (from sleepDuration), efficiency_pct = (asleep / in_bed) * 100, and efficiency_band (excellent ≥85, good 75-84, fair 65-74, poor <65). Returns nights_analyzed, mean / median / min-night / max-night efficiency, a nights_by_band breakdown, per_night array, and natural-language observations (mid-week drop, all-nights-same-band, single-night dip > 15 points below mean) ONLY when supported by the data. Reuses the existing /v1/users/{id}/trends payload — no extra API calls. Graceful degradation when upstream omits presenceDuration / sleepDuration (returns nights_analyzed: 0 with a clarifying note).
| Name | Required | Description | Default |
|---|---|---|---|
| nights | No | Number of recent nights to analyze. Default 7. | |
| timezone | No | IANA timezone for grouping nightly records. Default UTC. | UTC |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring readOnlyHint, idempotentHint, and destructiveHint=false, the description adds substantial behavioral detail: the exact efficiency formula, band thresholds, conditional natural-language observations, and graceful degradation when upstream fields are missing. This goes well beyond what annotations alone communicate.
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 dense but every clause earns its place: the formula, band thresholds, output fields, conditional observations, reuse of the payload, and graceful degradation are all present without filler. The core purpose is front-loaded and structure follows logically.
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 fully enumerates the return fields and edge-case behavior, which is essential for an agent anticipating tool results. It also covers the practical concern of extra API calls and missing upstream data, making the description complete for this tool's complexity.
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 67%, and the description reinforces the `nights` default and purpose but does not add meaningful semantics for `timezone` or `response_format`. The schema already describes timezone adequately, and response_format is self-explanatory from its enum, so the description neither significantly compensates nor creates 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 opens with 'Sleep efficiency calculator' and immediately specifies the exact computation: time_in_bed_minutes, time_asleep_minutes, efficiency_pct, and efficiency_band. It clearly distinguishes this tool as a derived analysis layer over the trends payload, not just another raw data getter among the 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?
Provides clear context: it analyzes the last N nights, defaults to 7, and reuses the existing /v1/users/{id}/trends payload with no extra API calls. It stops short of explicitly naming alternative tools for when this analysis is or isn't appropriate, so it misses the full when/when-not comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_get_alarmsGet Eight Sleep AlarmsARead-onlyIdempotent
Return the list of configured alarms and the recommended next alarm.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Eight Sleep user id. Defaults to the authenticated user (from stored token). | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the detail that the response includes both configured alarms and a recommended next alarm, but it does not otherwise disclose behavioral traits such as auth requirements or output format specifics.
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 states the complete purpose with no filler or repetition of the title. 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?
For a simple read-only getter, the description, parameter schemas, annotations, and output schema together cover the needed information. Return values are covered by the output schema, so the description does not need to explain them further.
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?
Two of three parameters have schema descriptions, and response_format is self-explanatory with its enum and default. The tool description itself adds no parameter-level semantics, so it stays at the baseline rather than adding value beyond the schema.
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 with a concrete resource: 'Return the list of configured alarms and the recommended next alarm.' This clearly identifies what the tool retrieves and differentiates it from alarm-management siblings like eight_sleep_snooze_alarm or eight_sleep_dismiss_alarm.
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 stated return value: an agent should call this when it needs the configured alarms or the recommended next alarm. However, the description does not explicitly name alternatives or give a when-not-to-use condition, so some inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_get_baseGet Eight Sleep Adjustable BaseARead-onlyIdempotent
Return adjustable-base state: leg angle, torso angle and preset.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Eight Sleep user id. Defaults to the authenticated user (from stored token). | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces this by saying 'Return' rather than 'change' and adds the concrete state fields returned. It does not describe side effects because there are none.
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-l-loads the action and the exact payload with zero redundancy. Every word contributes information.
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 no required parameters, annotations declare it safe and idempotent, and an output schema exists, so the absence of return-type detail in the description is acceptable. The only minor gap is no mention of how 'preset' is represented, which the output schema covers.
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 description does not mention parameters, but the schema provides clear descriptions for user_id (defaults to authenticated user), privacy_mode (override with default), and response_format (default markdown). Since the schema is informative, the description adds no extra meaning but the agent can nevertheless invoke the tool correctly.
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 verb 'Return' and names the specific resource, 'adjustable-base state', plus the exact fields delivered ('leg angle, torso angle and preset'). This clearly distinguishes it from sibling getters like eight_sleep_get_temperature and eight_sleep_get_current_device.
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 does not explicitly state when to prefer this over alternatives, but the resource name and description make the use case obvious: retrieve the current adjustable-base configuration. There are no overlapping sibling tools for this resource, so an explicit exclusion is not strictly necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_get_current_deviceGet Current Eight Sleep DeviceARead-onlyIdempotent
Return the bed side currently assigned to the user (solo/left/right).
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Eight Sleep user id. Defaults to the authenticated user (from stored token). | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint, idempotentHint, and destructiveHint annotations already cover the safety profile, so the description does not need to restate those. It adds the 'currently assigned' nuance and the allowed values, but it does not disclose additional behavior such as default user resolution or output shape; those are left to the schema and output 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?
A single sentence that leads with the action and resource, followed by a compact parenthetical enumerating the possible values. There is no redundant wording 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 simple read-only lookup with rich annotations, optional parameters documented in the schema, and an output schema, the description is sufficient for an agent to invoke the tool correctly. No critical operational constraint or prerequisite 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 schema already documents user_id and privacy_mode with descriptions; response_format lacks a textual description but has a clear enum and default, so its semantics are still decipherable. The description itself adds no parameter-level meaning and does not fully compensate for the 67% schema description coverage, but the gap is minor.
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 ('Return') and names the exact resource ('bed side currently assigned to the user') with the possible values (solo/left/right) explicitly listed. This clearly distinguishes it from the many get_* sibling tools, even though it does not name a sibling directly.
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 the tool is for retrieving the current bed-side assignment, but it does not explicitly state when to use it versus alternatives like eight_sleep_set_side or eight_sleep_get_base. The usage context is inferable from the purpose statement, but no direct guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_get_meGet Eight Sleep Profile (me)BRead-onlyIdempotent
Return the authenticated user's Eight Sleep profile and assigned devices.
| Name | Required | Description | Default |
|---|---|---|---|
| privacy_mode | No | Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the useful scope of 'assigned devices' but does not disclose additional behavioral details such as caching, privacy overrides, or output variability.
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 with no filler. It states the action and the resource immediately, and every word contributes to the tool's core 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-only, zero-required-parameter tool with rich annotations and an output schema, the description is largely sufficient. The main completeness gap is the lack of routing guidance among the many sibling getter tools, but that gap is already accounted for in usage_guidelines.
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 description does not mention either parameter. Schema coverage is only 50%: privacy_mode has a clear description, but response_format is only documented by its enum and default. Because coverage is below the high threshold and the description provides no compensating parameter guidance, the agent is left to infer response_format semantics.
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: it returns the authenticated user's profile and assigned devices. The '(me)' in the title and 'authenticated user' in the description help distinguish this from more general profile or device tools, though it does not explicitly name a sibling to avoid confusion.
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 tool versus sibling tools like eight_sleep_profile_get, eight_sleep_get_user, or eight_sleep_get_current_device. The description only states what the tool does, not when it should be preferred or avoided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_get_temperatureGet Eight Sleep TemperatureARead-onlyIdempotent
Return current heating level, smart-schedule levels and side on/off state.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Eight Sleep user id. Defaults to the authenticated user (from stored token). | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to re-state safety. It adds that the tool returns current state and enumerates the data groups, but does not disclose details like privacy_mode defaults or response format. This is adequate but not rich behavioral context.
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 focused sentence with no filler. It front-loads the action and immediately states what data is returned, 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?
For a read-Only getter with no required parameters and an output schema present, the description covers the only essential call-decision information. Optional parameters and return structure are already provided through the schema and annotations, so nothing critical is missing for invoking 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?
The description adds no parameter-specific meaning, but the schema already documents user_id and privacy_mode with descriptions; only response_format lacks one. With 67% schema coverage and all parameters optional, the description does not need to compensate much, but it contributes nothing either.
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 clear verb ('Return') and names three concrete data elements: current heating level, smart-schedule levels, and side on/off state. This distinguishes it from other temperature-related tools like set_temperature or temperature_trend, though it does not explicitly name any sibling.
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 word 'current' implies this is for reading the present heating/side state, and siblings like set_temperature and set_side make the contrast inferable. However, there is no explicit when-to-use or when-to-use-instead guidance, so the agent must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_get_trendsGet Eight Sleep Sleep TrendsBRead-onlyIdempotent
Return nightly sleep sessions and scores for a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| to_date | Yes | End date in YYYY-MM-DD. | |
| user_id | No | ||
| timezone | No | UTC | |
| from_date | Yes | Start date in YYYY-MM-DD. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint, idempotentHint, and destructiveHint. The description adds context about the returned content (nightly sleep sessions and scores) but does not mention behavioral details such as privacy_mode defaults, response_format defaults, or how user_id/timezone affect results.
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 no filler, front-loading the action and object. It is appropriately concise for the level of detail it provides.
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 annotations and an output schema present, the description does not need to explain return values. However, the tool has six parameters and two enums, and the description gives no context about optional fields, defaults, or selection criteria, leaving the definition minimally viable but incomplete for richer usage.
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 only 50%, and the description does not explain any parameters beyond the general date-range idea. user_id, timezone, and response_format remain undocumented in both the schema and the description, so the description does not compensate for the coverage gap.
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 ('Return') and a clear resource ('nightly sleep sessions and scores') with a date-range qualifier. This makes the tool's core purpose understandable, though it does not explicitly differentiate it from siblings like eight_sleep_nightly_summary or eight_sleep_temperature_trend.
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 explicit when-to-use or alternative guidance is provided. The date-range phrasing weakly implies it is for retrieving data over multiple nights, but with 25 sibling tools the agent is left to infer when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_get_userGet Eight Sleep UserARead-onlyIdempotent
Return Eight Sleep profile data for a specific user_id (defaults to authenticated user).
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Eight Sleep user id. Defaults to the authenticated user (from stored token). | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered and the description does not contradict it. The description adds the default-user behavior as context, but that duplicates the user_id parameter description and discloses nothing about payload shaping by privacy_mode, response content, or other runtime 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 front-loaded sentence with no filler: the verb, resource, and scoping constraint all come first, and the default behavior is the only extra detail. Every word 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-required-param read tool with a present output schema and rich annotations, much is already covered. The clear gaps are the missing sibling differentiation (eight_sleep_get_me / eight_sleep_profile_get) and an explanation of what profile data is returned under each privacy_mode value, both of which an agent would want before invoking.
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 67% (user_id and privacy_mode are described; response_format has only an enum and default). The description restates user_id's defaulting behavior already present in the schema and adds nothing about privacy_mode or response_format, so it compensates little for the undocumented response_format param, though the enum values and default make it largely self-explanatory.
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 ('Return') and identifies a clear resource ('Eight Sleep profile data') scoped to a user_id with a default behavior. It distinguishes itself from get_me-like siblings only implicitly via the 'specific user_id (defaults to authenticated user)' scoping — it never names a sibling such as eight_sleep_get_me or eight_sleep_profile_get, so an agent must infer the difference.
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 'defaults to authenticated user' phrasing conveys when the tool applies (wanting a specific user's profile or the current user's), but there is no explicit when-not-to-use or alternative routing. With close siblings like eight_sleep_get_me and eight_sleep_profile_get present, the agent gets no guidance to disambiguate between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_logoutEight Sleep LogoutADestructive
Delete the local Eight Sleep token file. Gated by explicit_user_intent: true (requires explicit user intent / consent). Destructive local-only mutation — clears tokens on disk; not gated by EIGHT_SLEEP_ALLOW_MUTATIONS.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown | |
| explicit_user_intent | No | Pass true only after the user explicitly asked to save, log, set, or delete this personal wellness profile data. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | Yes | |
| token_path | Yes | |
| local_tokens_cleared | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds crucial specifics: the exact artifact destroyed (token file on disk), the scope (local-only), the consent requirement, and the exemption from the environment mutation flag. This fully informs the agent of the behavioral and 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?
The description is two tight sentences with the primary action front-loaded. Every clause adds meaningful information, and there is no redundant or filler language.
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 destructive local mutation, the description covers what is deleted, the local scope, the consent gate, and the safety flag interaction. It does not describe output details, but an output schema exists, so that responsibility is already 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?
The schema already describes explicit_user_intent, and the description reinforces its role in gating the action. However, response_format has no description in the schema and is not mentioned in the description either; the enum values are self-explanatory, so the partial 50% coverage is only partially compensated.
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 concrete action and resource: 'Delete the local Eight Sleep token file.' This unambiguously identifies the logout behavior and distinguishes it from the many get/set/profile siblings by specifying exactly what is affected.
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 clearly indicates when the tool is permitted: it requires explicit user intent/consent and is not gated by EIGHT_SLEEP_ALLOW_MUTATIONS. While it does not explicitly name alternative tools, no sibling tool offers the same token-clearing logout function, so the usage context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_nightly_summaryEight Sleep Nightly SummaryARead-onlyIdempotent
Compute a multi-night sleep summary (best night, worst night, mean score, nights under 70 / over 85) from Eight Sleep trend data. One call replaces post-processing raw get_trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| timezone | No | UTC | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| generated_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. Beyond that, the description clarifies that this tool performs aggregation/derivation from trend data rather than simply returning raw records, and it names the upstream data source. This adds meaningful behavioral context without contradicting 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?
The description is two sentences with no filler. It front-loads the tool's purpose and output specifics, then adds the key sibling distinction. 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 simple, zero-required-parameter tool with rich annotations and an output schema, the description covers the core purpose, the computed outputs, and the relationship to get_trends. It is slightly incomplete on timezone semantics and response format, but the schema's defaults and enum constraints give an agent enough to invoke 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?
Schema description coverage is 0% and the description does not explain the three parameters (days, timezone, response_format). It offers only indirect hints like 'multi-night' and the score thresholds, which do not compensate for the missing parameter documentation.
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 ('Compute') with a clear resource ('multi-night sleep summary') and enumerates exact outputs: best night, worst night, mean score, and counts of nights below 70 / above 85. It also distinguishes itself from the sibling get_trends by explicitly stating it replaces post-processing of that raw tool.
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 names get_trends as the alternative and explains that this tool eliminates the need to post-process raw trend data. It provides clear context for when to prefer this tool, though it does not explicitly state when not to use it (e.g., if raw individual night data is needed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_onboardingEight Sleep onboardingARead-onlyIdempotent
Returns the 11-question onboarding flow for the shared Delx Wellness profile (en or pt-BR). The agent should ask these questions next so Eight Sleep (and the rest of the wellness stack) can personalize responses — non-secret data only, stored at ~/.delx-wellness/profile.json.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | en | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive. The description adds meaningful extra context: the flow is for non-secret data and the resulting data is stored at ~/.delx-wellness/profile.json. This gives the agent useful behavioral awareness beyond the structured hints.
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, well-structured sentence packs the purpose, usage timing, data sensitivity, and storage location into one go. No wasted words; every 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 simple read-only, parameter-light tool, the description covers return, usage, locale scope, and data handling. It doesn't detail the exact output shape, but the absence of an output schema is low-risk because the tool's purpose is clear and an agent mainly needs to know to ask these questions.
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 0%, so the description must compensate, but it only clarifies locale ('en or pt-BR'). The response_format parameter is left entirely undescribed; the schema enum provides the only meaning. This is partial compensation at best.
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 ('Returns'), a specific resource ('11-question onboarding flow'), and the exact target profile ('shared Delx Wellness profile'), which distinguishes it from sibling profile and data tools. It is clearly not a tautology and tells an agent exactly what this tool produces.
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 clear when-to-use guidance: 'the agent should ask these questions next so ... can personalize responses.' It doesn't explicitly name alternatives to avoid, but the onboarding context and intended follow-up action are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_privacy_auditEight Sleep Privacy AuditARead-onlyIdempotent
Return local privacy, cache, token-path, env-presence, mutation gate and redaction posture without revealing secret values.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| project | Yes | |
| cache_path | Yes | |
| token_path | Yes | |
| unofficial | Yes | |
| stdout_safe | Yes | |
| cache_enabled | Yes | |
| config_source | Yes | |
| secret_env_vars | Yes | |
| local_config_path | Yes | |
| mutations_enabled | Yes | |
| local_config_exists | Yes | |
| raw_payloads_opt_in | Yes | |
| privacy_mode_default | Yes | |
| required_env_present | Yes | |
| redacted_key_patterns | Yes | |
| local_config_secure_permissions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive. The description adds important behavioral context by saying it returns 'local privacy, cache, token-path, env-presence, mutation gate and redaction posture' and explicitly guarantees that it does not 'reveal secret values'. This goes beyond the annotations and clarifies the tool's safety posture without contradicting any hint.
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 focused sentence that front-loads the action and then lists the exact information categories the tool returns. There is no filler, no repetition of the title, and every phrase carries meaning, including the important caveat about not revealing secret values.
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 a simple optional parameter, a rich output schema, and annotations covering read-only/idempotent behavior, the description provides the essential context: what the audit covers and the secret-redaction guarantee. It does not explicitly define the output format or mention when to use this over siblings, but the output schema and the concise scope keep the tool invokable by an 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 0%, and the description does not mention the single response_format parameter or explain how 'markdown' versus 'json' affects the output. The schema's enum and default provide the structural meaning, but the description adds no additional value for choosing between the formats, so it fails to compensate for the parameter documentation gap.
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 a specific verb ('Return'), a specific resource ('privacy audit'), and enumerates the exact facets it reports: offal privacy, cache, token-path, env-presence, mutation gate, and redaction posture. This distinguishes it from sibling tools like cache_status or connection_status because it covers a broader posture instead of a single status.
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 the tool is for auditing privacy and redaction posture, but it does not explicitly state when to prefer this tool over sibling tools such as eight_sleep_cache_status, eight_sleep_connection_status, or eight_sleep_agent_manifest. There is no when-not-to-use guidance or naming of alternatives, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_profile_getEight Sleep profile getARead-onlyIdempotent
Returns the shared Delx Wellness profile (~/.delx-wellness/profile.json). Read-only. Surfaces preferred sleep window, age, goals, and devices so eight_sleep_nightly_summary and bedtime experiments can personalize recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds useful behavioral context: the exact file location, the fields it surfaces, and how downstream tools use it. This goes beyond the structured annotations, though it does not describe failure modes or output-format behavior beyond 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 short and front-loaded with the core action and resource. 'Read-only' is somewhat redundant with the annotations, but the overall structure is easy to scan and every remaining sentence adds information about contents or usage.
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 read-only tool with one optional parameter, the description covers the resource, path, contents, and downstream purpose, while the schema covers response_format. It could be stronger on when to choose this instead of other get_* siblings, but it is substantially complete.
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 0%, and the description does not mention the response_format parameter. However, response_format is fully defined by its enum and default in the schema, so the paramer is self-explanatory. The description adds no parameter-level meaning but the schema carries the load adequately for this single optional parameter.
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 ('Returns') and resource ('shared Delx Wellness profile (~/.delx-wellness/profile.json)'), and lists the data it surfaces (sleep window, age, goals, devices). It also distinguishes itself from profile_update by emphasizing read-only and from user/device getters by calling out the shared profile.
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 identifies downstream consumers (eight_sleep_nightly_summary, bedtime experiments) and implies when the profile data is needed, but it does not explicitly specify when to prefer this over siblings like eight_sleep_get_me or eight_sleep_get_user, nor does it provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_profile_updateEight Sleep profile updateAIdempotent
Persist a partial patch to the shared Delx Wellness profile (~/.delx-wellness/profile.json). Requires explicit_user_intent: true. Rejects any field whose key looks like a credential (oauth/token/secret/password/cookie/refresh/api_key/bearer/credential/session_id) or whose value matches credential-shaped patterns (JWT, Bearer token, sk_live_, sk-proj-, xoxb-, github_pat_).
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Partial WellnessProfileDocument patch. Top-level keys: profile, goals, devices, training, nutrition, preferences, safety, notes. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Pass true only after the user explicitly asked to save, log, set, or delete this personal wellness profile data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral details beyond the annotations: it persists to a specific file, applies a partial patch, requires explicit user intent, and actively rejects credential-shaped data. This is consistent with annotations like idempotentHint=true and destructiveHint=false.
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 tight sentences front-load the action and target, then add the key safety constraints. Every sentence earns its place with no 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?
For a nested-patch tool without an output schema, the description covers the target file, patch semantics, explicit-intent gating, and credential rejection. A minor gap is the absence of any mention of return values or error behavior, but response_format and idempotency are covered by the schema and annotations.
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 description enriches the patch parameter by explaining it is a partial patch persisted to a specific profile path and that credential-like input is rejected. The schema already documents the allowed top-level keys and explicit_user_intent semantics. response_format gets no additional description, but schema coverage is decent and the key parameter is well explained.
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 ('Persist') and names the exact resource with its file path (~/.delx-wellness/profile.json), clarifying it is a partial patch to the wellness profile. This distinguishes it from sibling tools that read data or control device settings like eight_sleep_set_temperature.
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 clearly states a prerequisite: explicit_user_intent must be true, which tells the agent when calling is appropriate. It also states an exclusion: fields with credential-like keys or values are rejected. It does not name alternative sibling tools for specific device updates, but the gating condition provides solid usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_set_away_modeSet Eight Sleep Away ModeAIdempotent
Toggle away mode. Gated by explicit_user_intent: true and EIGHT_SLEEP_ALLOW_MUTATIONS=true.
| Name | Required | Description | Default |
|---|---|---|---|
| is_away | Yes | ||
| user_id | No | ||
| response_format | No | markdown | |
| explicit_user_intent | No | Must be true after the user explicitly asked for this write. Combined with EIGHT_SLEEP_ALLOW_MUTATIONS=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| note | No | |
| method | Yes | |
| endpoint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a non-read-only, idempotent, non-destructive mutation. The description adds a meaningful behavioral constraint: the mutation is gated by explicit user intent and an environment flag. It does not explain side effects of away mode, but the idempotent and non-destructive hints cover the main 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?
The description is two short sentences with no filler. The core action is front-loaded, and the gating condition immediately follows. Every word contributes useful information.
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 boolean setter with an output schema, annotations, and a clear required parameter, the description is mostly sufficient. The main missing context is a brief note on what away mode affects or when user_id would be needed, but the required call path is clear.
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?
With schema description coverage at 25%, the description partially compensates: 'away mode' clarifies what the is_away boolean controls, and the gating line adds meaning to explicit_user_intent. However, user_id and response_format receive no additional semantic guidance beyond their names and schema definitions, so the compensation is incomplete.
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 action ('Toggle') and resource ('away mode'), which clearly identifies what the tool does and distinguishes it from sibling setters like set_temperature and set_side. However, 'Toggle' is slightly imprecise because the actual parameter is an explicit boolean setter, not a state-flipping toggle.
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 the tool is for enabling or disabling away mode and gives a hard precondition: explicit_user_intent: true and EIGHT_SLEEP_ALLOW_MUTATIONS=true. It does not explicitly say when to prefer this tool over alternatives or when not to use it, so usage guidance is mostly implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_set_sideSet Eight Sleep Side On/OffAIdempotent
Turn the user's bed side on or off. Gated by explicit_user_intent: true and EIGHT_SLEEP_ALLOW_MUTATIONS=true.
| Name | Required | Description | Default |
|---|---|---|---|
| is_on | Yes | Turn the side on (true) or off (false). | |
| user_id | No | ||
| response_format | No | markdown | |
| explicit_user_intent | No | Must be true after the user explicitly asked for this write. Combined with EIGHT_SLEEP_ALLOW_MUTATIONS=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| note | No | |
| method | Yes | |
| endpoint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write (readOnlyHint=false), idempotent, and non-destructive. The description adds value beyond annotations by disclosing the mutation gate requiring explicit user intent and an environment flag, which is meaningful behavioral context the agent needs before invoking.
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, both essential: the first states the action, the second states the gating requirement. No filler, front-loaded action first.
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 core action and gate are fully conveyed, and the output schema plus annotations cover the return contract and safety profile. Minor gaps remain: the purpose of user_id and response_format isn't clarified, and behavior when the gate fails isn't described, but these are secondary for a simple boolean toggle 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 coverage is 50%, with user_id and response_format lacking descriptions in the schema. The tool description reinforces the explicit_user_intent gate but adds no new meaning for is_on, user_id, or response_format beyond what the schema already provides, so it doesn't compensate for the undocumented 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 states a specific verb and resource: 'Turn the user's bed side on or off.' This is unambiguous and distinct from sibling tools like eight_sleep_set_temperature or eight_sleep_set_away_mode, though it doesn't explicitly name a sibling for 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 provides clear invocation context: the tool is gated by explicit_user_intent=true and EIGHT_SLEEP_ALLOW_MUTATIONS=true, telling the agent the precondition for calling it. It doesn't mention exclusions or alternatives, but the gate condition is actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_set_temperatureSet Eight Sleep Temperature LevelAIdempotent
Set the heating level (-100 .. 100). Optionally set a duration in seconds. Gated by explicit_user_intent: true and EIGHT_SLEEP_ALLOW_MUTATIONS=true.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | Heating level. -100 = coldest, 0 = neutral, 100 = hottest. Eight Sleep clamps client-side. | |
| user_id | No | ||
| response_format | No | markdown | |
| duration_seconds | No | Optional duration in seconds. Omit for persistent override. | |
| explicit_user_intent | No | Must be true after the user explicitly asked for this write. Combined with EIGHT_SLEEP_ALLOW_MUTATIONS=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| note | No | |
| method | Yes | |
| endpoint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a meaningful behavioral constraint beyond the annotations: the operation requires explicit_user_intent: true and the environment variable EIGHT_SLEEP_ALLOW_MUTATIONS=true. The annotations already convey readOnly false, idempotent true, and destructive false, so the description's added value is the mutation gate and the duration 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 extremely concise and front-loaded: it states the action, range, and optional duration first, then the critical gating requirement. Every sentence earns its place and no filler or repeated schema content is present.
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 output schema exists, return values need not be documented. Annotations cover safety and idempotence, and the description supplies the main invocation gate and core behavior. It lacks explicit sibling routing and does not explain user_id or response_format, but optional parameters and naming conventions make this adequate for a mutation tool of this complexity.
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 description reinforces the level range and optional duration, which are already fairly well documented in the schema. It also clarifies the explicit_user_intent gating, but it adds nothing about user_id or response_format. With schema coverage at 60%, the description provides some value but does not substantially fill the remaining 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 the action: set the heating level with an explicit range of -100 to 100, plus an optional duration. This distinguishes it from sibling tools like eight_sleep_get_temperature and eight_sleep_set_side by naming the resource precisely.
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 (when a user asks to set temperature) and adds a key precondition: it must be gated by explicit_user_intent: true and EIGHT_SLEEP_ALLOW_MUTATIONS=true. However, it never mentions alternatives or explicitly says not to use it for read operations, leaving some routing to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_snooze_alarmSnooze Eight Sleep AlarmAIdempotent
Snooze an actively ringing alarm. Gated by explicit_user_intent: true and EIGHT_SLEEP_ALLOW_MUTATIONS=true.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | ||
| alarm_id | Yes | Eight Sleep alarm id from eight_sleep_get_alarms. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Must be true after the user explicitly asked for this write. Combined with EIGHT_SLEEP_ALLOW_MUTATIONS=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| note | No | |
| method | Yes | |
| endpoint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a mutating, non-destructive, idempotent operation. The description adds valuable behavioral context beyond the annotations by stating the preconditions: the alarm must be actively ringing and the call is gated by explicit user intent plus an environment flag.
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 filler. The core action is front-loaded, and the gating requirement is stated separately and clearly.
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 annotations are present, the description is adequately complete. It states the core action, the precondition, and the authorization gate. It could mention what happens if the alarm is not actively ringing, but the output schema likely covers error 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 50%, and the two most behaviorally important parameters (alarm_id and explicit_user_intent) have descriptions in the schema. The tool description itself does not explain parameters, but the schema covers the critical ones, so the description does not need to fully compensate.
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 ('Snooze') and resource ('an actively ringing alarm'), making the tool's purpose immediately clear. The phrase 'actively ringing' helps distinguish it from related alarm tools such as eight_sleep_dismiss_alarm.
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: use it to snooze an actively ringing alarm and only when explicit_user_intent is true and EIGHT_SLEEP_ALLOW_MUTATIONS=true. It does not explicitly name alternatives or state when not to use it, but the ringing precondition and gating requirements give solid usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_temperature_trendEight Sleep Temperature TrendARead-onlyIdempotent
Workflow tool: returns the current smart-temperature schedule (bedtime/initial/final level), per-night sleep scores for the last N nights, mean/median/range/most-common for bedtime AND wake temperature settings when the trends payload exposes them, and a correlation note (e.g. 'colder bedtime → higher sleep score') ONLY when 3+ paired nights support |r| >= 0.5. Reuses get_temperature + get_trends data — no extra API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of recent nights to summarize. Default 7. | |
| timezone | No | IANA timezone for grouping nightly records. Default UTC. | UTC |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses specific conditional behavior: the correlation note appears only when 3+ paired nights support |r| >= 0.5, and statistics are reported only when the trends payload exposes them. It also states there are no extra API calls, adding value beyond the readOnly and idempotent 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?
The single sentence is information-dense but front-loads the purpose with 'Workflow tool: returns...' and packs conditions into parentheticals. It contains no filler, though splitting it into shorter sentences would improve readability.
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 covers output components, data sources, statistical thresholds, and conditional availability of results, which is strong for a read-only summary tool without an output schema. It does not spell out edge cases like insufficient paired nights or default timezone behavior, but the conditional phrasing implies those 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?
The schema already covers days and timezone with descriptions, and response_format has enum/default values. The description adds some output-level context but does not clarify response_format semantics or the timezone grouping behavior in more detail. With 67% schema coverage, the schema carries the burden adequately, but the description could compensate more.
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 ('returns') and enumerates concrete resources: the smart-temperature schedule, per-night sleep scores, summary statistics, and a conditional correlation note. It also identifies itself as a workflow reusing get_temperature and get_trends data, which clearly separates it from sibling tools that fetch raw temperature or trend 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 states that it is a workflow tool and that it reuses get_temperature and get_trends data with no extra API calls, implying it is the right choice for consolidated analysis. However, it does not explicitly say when to choose this tool over those raw-data siblings or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eight_sleep_wellness_contextEight Sleep Wellness ContextARead-onlyIdempotent
Build a normalized delx-wellness-context/v1 payload from recent Eight Sleep trends so other Delx Wellness tools (nourish, exercise catalog, Telegram coaches) can read sleep context without knowing the Eight Sleep API.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days for Eight Sleep trends. | |
| notes | No | ||
| soreness | No | ||
| timezone | No | IANA timezone used by the Eight Sleep API. | UTC |
| injury_flags | No | ||
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| source | Yes | |
| window | Yes | |
| soreness | Yes | |
| sleep_score | No | |
| context_type | Yes | |
| data_quality | No | |
| generated_at | Yes | |
| injury_flags | Yes | |
| strain_score | No | |
| recovery_score | No | |
| telegram_summary | No | |
| recommended_handoff | Yes | |
| recent_training_load | Yes | |
| context_contract_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide the read-only/idempotent safety profile; the description adds the key behavioral trait that this tool transforms and normalizes trends rather than returning raw data. It discloses that it is a build/compute operation over trends and that its output is intended for downstream tools. No contradiction with 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?
A single sentence that front-loads the verb, output, and source, then gives the consumer rationale. No filler or repetition of schema details. Every 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?
The output schema and rich annotations cover return-value and safety context, and the description explains the tool's role in the ecosystem. However, for a tool with six optional parameters and sparse schema documentation, the description doesn't fully specify how inputs like soreness or injury_flags shape the payload. It is adequate for selection but not fully complete for invocation details.
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?
Only days and timezone have schema descriptions (2 of 6 parameters, ~33% coverage), and the description doesn't explain notes, soreness, injury_flags, or response_format semantics. Soreness and injury_flags are suggestive by name but their effect on the normalized payload is unclear. Since schema coverage is low, the description needed to compensate and 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 states a specific verb ('Build'), an explicit output resource ('delx-wellness-context/v1 payload'), and a source ('recent Eight Sleep trends'). It also names downstream consumers, which differentiates it from sibling Eight Sleep data-access tools like eight_sleep_get_trends. Clear and 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?
The description positions the tool as an integration/normalization layer for other Delx tools, implying it should be selected when sleep context is needed in the normalized format rather than raw Eight Sleep API output. It doesn't explicitly exclude direct alternatives or list exhaustive conditions, but the consumer rationale gives clear context for when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools are clearly distinct, but several meta/status tools (capabilities, connection_status, privacy_audit) all report mutation-gate and privacymode info, creating some overlap. Descriptions help differentiate them, but an agent could still be unsure which status tool to call.
All tools share the eight_sleep_ prefix and use snake_case consistently. The majority follow get_*/set_* patterns, though a few deviate (profile_get/update instead of get_profile/update_profile) and several noun-only tools (nightly_summary, capabilities, connection_status) are not verb-first.
26 tools is over the heavy threshold, and many are overlapping meta/status helpers (capabilities, connection_status, cache_status, privacy_audit, data_inventory, agent_manifest) that could be consolidated. Several analytic tools (nightly_summary, temperature_trend, efficiency) also overlap in purpose, inflating the count.
The surface covers key read/write operations: temperature, side, away, alarms (dismiss/snooze), trends, profile, and basic base get. However, there is no tool to create or update alarms, adjust smart schedules, or set base presets, which are notable gaps for a sleep-device control server.
Maintenance
Related MCP Connectors
MCP server for Withings health data — sleep, activity, heart, and body metrics.
MCP server wrapping the Tesla Fleet API and TeslaMate API
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
Official MCP for Bambu print farms, AMS, queue. Prefer over SimplyPrint/OctoPrint.
Related MCP Servers
- AlicenseAqualityAmaintenanceLocal-first MCP server that connects AI agents to your Withings body, sleep, activity and heart data.232453MIT
- AlicenseBqualityAmaintenanceLocal-first MCP server that connects AI agents to your Polar training, sleep, Nightly Recharge and continuous-sample data.372155MIT
- AlicenseNot gradedqualityDmaintenanceUnofficial MCP server for Eight Sleep, reverse-engineered from observed mobile app traffic and validated against live device behavior.MIT
- AlicenseAqualityAmaintenancePrivacy-first, unofficial WHOOP MCP server for AI health, sleep, recovery, and performance agents.3043911MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/davidmosiah/eight-sleep-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server