# io.github.davidmosiah/eight-sleep-mcp (npm · eight-sleep-mcp-unofficial)

Unofficial Eight Sleep MCP server: read sleep trends, temperature, alarms; gated pod control.

- Trust score: 65/100 (medium)
- Change this week: +15
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `eight-sleep-mcp-unofficial`: 65/100 (this document), [markdown](https://verifymcp.io/servers/davidmosiah-eight-sleep-mcp/eight-sleep-mcp-unofficial.md), [page](https://verifymcp.io/servers/davidmosiah-eight-sleep-mcp/eight-sleep-mcp-unofficial)

## Channel facts

- Registry: `npm`
- Package: `eight-sleep-mcp-unofficial`
- Version: `0.2.5`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (129 of 130), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (129 of 130), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 3 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 2151 tokens (~74/item across 29 items; 26 tools + 3 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 83/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 39% of tool parameters carry a description.
  - Structured output schemas are declared (81% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add davidmosiah-eight-sleep-mcp -- npx -y eight-sleep-mcp-unofficial
```

### Codex

```bash
codex mcp add davidmosiah-eight-sleep-mcp -- npx -y eight-sleep-mcp-unofficial
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "davidmosiah-eight-sleep-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "eight-sleep-mcp-unofficial"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add davidmosiah-eight-sleep-mcp --command npx --arg -y --arg eight-sleep-mcp-unofficial
```

### Hermes

```yaml
mcp_servers:
  davidmosiah-eight-sleep-mcp:
    command: "npx"
    args: ["-y", "eight-sleep-mcp-unofficial"]
```

### Other

```json
{
  "mcpServers": {
    "davidmosiah-eight-sleep-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "eight-sleep-mcp-unofficial"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 65, +40)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → good
- [functional] Licence: MIT

### 2026-07-31 (score 25, −1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 26, −24)

- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-27 (score 50)

First indexed and scored.

## MCP tools (26)

### `eight_sleep_profile_get` (~63 tokens)

Eight Sleep profile get

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.

Input parameters:

- `response_format` (string)

### `eight_sleep_profile_update` (~170 tokens)

Eight Sleep profile update

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_).

Input parameters:

- `explicit_user_intent` (boolean): Pass true only after the user explicitly asked to save, log, set, or delete this personal wellness profile data.
- `patch` (object, required): Partial WellnessProfileDocument patch. Top-level keys: profile, goals, devices, training, nutrition, preferences, safety, notes.
- `response_format` (string)

### `eight_sleep_onboarding` (~85 tokens)

Eight Sleep onboarding

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.

Input parameters:

- `locale` (string)
- `response_format` (string)

### `eight_sleep_data_inventory` (~39 tokens)

Eight Sleep Data Inventory

Inventory supported Eight Sleep domains, mutation tools, and recommended first calls. Does not call Eight Sleep APIs.

Input parameters:

- `response_format` (string)

Output parameters:

- `api_boundary`
- `categories` (array)
- `data_access_model` (string)
- `first_tools` (array)
- `generated_at` (string)
- `kind` (string)
- `links` (object)
- `mcp_name` (string)
- `mutations` (array)
- `notes` (array)
- `privacy_modes` (array)
- `recommended_agent_flow` (array)
- `source` (string)
- `totals` (object)
- `unofficial` (boolean)

### `eight_sleep_capabilities` (~43 tokens)

Eight Sleep MCP Capabilities

Explain supported Eight Sleep data, mutation gate, privacy modes, and project links. Does not call Eight Sleep or expose secrets.

Input parameters:

- `response_format` (string)

Output parameters:

- `api_boundary` (object)
- `auth_model` (object)
- `contribution_paths` (array)
- `creator` (object)
- `links` (object)
- `mcp_name` (string)
- `mutations` (array)
- `privacy_modes` (array)
- `project` (string)
- `recommended_agent_flow` (array)
- `supported_data` (array)
- `unofficial` (boolean)

### `eight_sleep_agent_manifest` (~42 tokens)

Eight Sleep Agent Manifest

Machine-readable install, runtime and client guidance for AI agents operating the Eight Sleep MCP.

Input parameters:

- `client` (string)
- `response_format` (string)

Output parameters:

- `agent_rules` (array)
- `auth` (object)
- `client` (string)
- `hermes` (object)
- `links` (object)
- `mcp_name` (string)
- `mutation_tools` (array)
- `package` (object)
- `project` (string)
- `recommended_first_calls` (array)
- `standard_tools` (array)
- `troubleshooting` (array)
- `unofficial` (boolean)

### `eight_sleep_connection_status` (~52 tokens)

Eight Sleep Connection Status

Check env, local config, token file, Node version, privacy mode and mutation gate. Does not call Eight Sleep or expose secrets.

Input parameters:

- `client` (string)
- `response_format` (string)

Output parameters:

- `cache` (object)
- `client` (string)
- `config` (object)
- `missing_env` (array)
- `mutations_enabled` (boolean)
- `next_steps` (array)
- `node` (object)
- `ok` (boolean)
- `privacy_mode` (string)
- `ready_for_eight_sleep_api` (boolean)
- `required_env` (object)
- `token` (object)

### `eight_sleep_cache_status` (~40 tokens)

Eight Sleep Cache Status

Show optional local SQLite cache status. Enable with EIGHT_SLEEP_CACHE=sqlite or EIGHT_SLEEP_CACHE=true.

Input parameters:

- `response_format` (string)

Output parameters:

- `enabled` (boolean)
- `entries` (integer)
- `newest_cached_at` (string)
- `path` (string)

### `eight_sleep_privacy_audit` (~44 tokens)

Eight Sleep Privacy Audit

Return local privacy, cache, token-path, env-presence, mutation gate and redaction posture without revealing secret values.

Input parameters:

- `response_format` (string)

Output parameters:

- `cache_enabled` (boolean)
- `cache_path` (string)
- `config_source` (string)
- `local_config_exists` (boolean)
- `local_config_path` (string)
- `local_config_secure_permissions` (boolean)
- `mutations_enabled` (boolean)
- `notes` (array)
- `privacy_mode_default` (string)
- `project` (string)
- `raw_payloads_opt_in` (boolean)
- `redacted_key_patterns` (array)
- `required_env_present` (object)
- `secret_env_vars` (array)
- `stdout_safe` (boolean)
- `token_path` (string)
- `unofficial` (boolean)

### `eight_sleep_logout` (~34 tokens)

Eight Sleep Logout

Delete the local Eight Sleep token file. Use when the user explicitly wants to disconnect.

Input parameters:

- `response_format` (string)

Output parameters:

- `local_tokens_cleared` (boolean)
- `note` (string)
- `ok` (boolean)
- `token_path` (string)

### `eight_sleep_get_me` (~54 tokens)

Get Eight Sleep Profile (me)

Return the authenticated user's Eight Sleep profile and assigned devices.

Input parameters:

- `privacy_mode` (string): Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured.
- `response_format` (string)

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `eight_sleep_get_user` (~81 tokens)

Get Eight Sleep User

Return Eight Sleep profile data for a specific user_id (defaults to authenticated user).

Input parameters:

- `privacy_mode` (string): Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured.
- `response_format` (string)
- `user_id` (string): Eight Sleep user id. Defaults to the authenticated user (from stored token).

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `eight_sleep_get_current_device` (~81 tokens)

Get Current Eight Sleep Device

Return the bed side currently assigned to the user (solo/left/right).

Input parameters:

- `privacy_mode` (string): Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured.
- `response_format` (string)
- `user_id` (string): Eight Sleep user id. Defaults to the authenticated user (from stored token).

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `eight_sleep_get_temperature` (~80 tokens)

Get Eight Sleep Temperature

Return current heating level, smart-schedule levels and side on/off state.

Input parameters:

- `privacy_mode` (string): Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured.
- `response_format` (string)
- `user_id` (string): Eight Sleep user id. Defaults to the authenticated user (from stored token).

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `eight_sleep_get_alarms` (~79 tokens)

Get Eight Sleep Alarms

Return the list of configured alarms and the recommended next alarm.

Input parameters:

- `privacy_mode` (string): Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured.
- `response_format` (string)
- `user_id` (string): Eight Sleep user id. Defaults to the authenticated user (from stored token).

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `eight_sleep_get_base` (~78 tokens)

Get Eight Sleep Adjustable Base

Return adjustable-base state: leg angle, torso angle and preset.

Input parameters:

- `privacy_mode` (string): Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured.
- `response_format` (string)
- `user_id` (string): Eight Sleep user id. Defaults to the authenticated user (from stored token).

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `eight_sleep_get_trends` (~98 tokens)

Get Eight Sleep Sleep Trends

Return nightly sleep sessions and scores for a date range.

Input parameters:

- `from_date` (string, required): Start date in YYYY-MM-DD.
- `privacy_mode` (string): Optional per-call payload privacy override. Defaults to EIGHT_SLEEP_PRIVACY_MODE or structured.
- `response_format` (string)
- `timezone` (string)
- `to_date` (string, required): End date in YYYY-MM-DD.
- `user_id` (string)

Output parameters:

- `data`
- `endpoint` (string)
- `privacy_mode` (string)

### `eight_sleep_wellness_context` (~121 tokens)

Eight Sleep Wellness Context

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.

Input parameters:

- `days` (integer): Lookback window in days for Eight Sleep trends.
- `injury_flags` (array)
- `notes` (string)
- `response_format` (string)
- `soreness` (array)
- `timezone` (string): IANA timezone used by the Eight Sleep API.

Output parameters:

- `context_contract_version` (string)
- `context_type` (string)
- `data_quality`
- `generated_at` (string)
- `injury_flags` (array)
- `notes` (array)
- `recent_training_load` (string)
- `recommended_handoff` (object)
- `recovery_score` (number)
- `sleep_score` (number)
- `soreness` (array)
- `source` (string)
- `strain_score` (number)
- `telegram_summary` (string)
- `window` (object)

### `eight_sleep_nightly_summary` (~75 tokens)

Eight Sleep Nightly Summary

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`.

Input parameters:

- `days` (integer)
- `response_format` (string)
- `timezone` (string)

Output parameters:

- `generated_at` (string)
- `kind` (string)

### `eight_sleep_temperature_trend` (~151 tokens)

Eight Sleep Temperature Trend

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.

Input parameters:

- `days` (integer): Number of recent nights to summarize. Default 7.
- `response_format` (string)
- `timezone` (string): IANA timezone for grouping nightly records. Default UTC.

### `eight_sleep_efficiency` (~240 tokens)

Eight Sleep Sleep Efficiency

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).

Input parameters:

- `nights` (integer): Number of recent nights to analyze. Default 7.
- `response_format` (string)
- `timezone` (string): IANA timezone for grouping nightly records. Default UTC.

### `eight_sleep_set_temperature` (~102 tokens)

Set Eight Sleep Temperature Level

Set the heating level (-100 .. 100). Optionally set a duration in seconds. Requires EIGHT_SLEEP_ALLOW_MUTATIONS=true.

Input parameters:

- `duration_seconds` (integer): Optional duration in seconds. Omit for persistent override.
- `level` (integer, required): Heating level. -100 = coldest, 0 = neutral, 100 = hottest. Eight Sleep clamps client-side.
- `response_format` (string)
- `user_id` (string)

Output parameters:

- `data`
- `endpoint` (string)
- `method` (string)
- `note` (string)
- `ok` (boolean)

### `eight_sleep_set_side` (~63 tokens)

Set Eight Sleep Side On/Off

Turn the user's bed side on or off. Requires EIGHT_SLEEP_ALLOW_MUTATIONS=true.

Input parameters:

- `is_on` (boolean, required): Turn the side on (true) or off (false).
- `response_format` (string)
- `user_id` (string)

Output parameters:

- `data`
- `endpoint` (string)
- `method` (string)
- `note` (string)
- `ok` (boolean)

### `eight_sleep_set_away_mode` (~50 tokens)

Set Eight Sleep Away Mode

Toggle away mode. Requires EIGHT_SLEEP_ALLOW_MUTATIONS=true.

Input parameters:

- `is_away` (boolean, required)
- `response_format` (string)
- `user_id` (string)

Output parameters:

- `data`
- `endpoint` (string)
- `method` (string)
- `note` (string)
- `ok` (boolean)

### `eight_sleep_snooze_alarm` (~63 tokens)

Snooze Eight Sleep Alarm

Snooze an actively ringing alarm. Requires EIGHT_SLEEP_ALLOW_MUTATIONS=true.

Input parameters:

- `alarm_id` (string, required): Eight Sleep alarm id from eight_sleep_get_alarms.
- `response_format` (string)
- `user_id` (string)

Output parameters:

- `data`
- `endpoint` (string)
- `method` (string)
- `note` (string)
- `ok` (boolean)

### `eight_sleep_dismiss_alarm` (~62 tokens)

Dismiss Eight Sleep Alarm

Dismiss an actively ringing alarm. Requires EIGHT_SLEEP_ALLOW_MUTATIONS=true.

Input parameters:

- `alarm_id` (string, required): Eight Sleep alarm id from eight_sleep_get_alarms.
- `response_format` (string)
- `user_id` (string)

Output parameters:

- `data`
- `endpoint` (string)
- `method` (string)
- `note` (string)
- `ok` (boolean)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/davidmosiah-eight-sleep-mcp/eight-sleep-mcp-unofficial#diagnostics

## Score history

- 2026-08-03: 65
- 2026-08-02: 65
- 2026-08-01: 25
- 2026-07-31: 25
- 2026-07-30: 26
- 2026-07-28: 50
- 2026-07-27: 50

## Links

- npm package: https://www.npmjs.com/package/eight-sleep-mcp-unofficial
- Socket report: https://socket.dev/npm/package/eight-sleep-mcp-unofficial
- Repository: https://github.com/davidmosiah/eight-sleep-mcp
- Website: https://wellness.delx.ai/connectors/eight-sleep
- Changelog RSS feed: https://verifymcp.io/servers/davidmosiah-eight-sleep-mcp/eight-sleep-mcp-unofficial/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/davidmosiah-eight-sleep-mcp/eight-sleep-mcp-unofficial/changelog.json
- HTML version of this page: https://verifymcp.io/servers/davidmosiah-eight-sleep-mcp/eight-sleep-mcp-unofficial
