A Model Context Protocol (MCP) server for accessing Eight Sleep Pod data.
- Node.js (v16+)
- Eight Sleep account
- Clone the repository
- Run:
npm install
npm run buildYou need to get your Eight Sleep user ID once and add it to your configuration. This prevents the client from having to authenticate with email/password on every request. You have two options:
Option 1: Direct API Call
curl -X POST https://client-api.8slp.net/v1/auth/login
-H "Content-Type: application/json"
-d '{"email":"your_email","password":"your_password"}'
2. Add the user ID to your configuration as shown below.
Option 2: Using MCP Client
1. First set up your `.env` file without the user ID:
```env
EIGHT_SLEEP_EMAIL=your_email
EIGHT_SLEEP_PASSWORD=your_password
- Run the MCP client once to get your user ID:
node build/index.js getUsersThe response will include your user ID. Save this value.
- Add the user ID to your configuration as shown below.
Create a .env file:
# Eight Sleep Authentication
EIGHT_SLEEP_EMAIL=your_email
EIGHT_SLEEP_PASSWORD=your_password
EIGHT_SLEEP_USER_ID=your_user_id # Required: Add the userId from one of the methods above
EIGHT_SLEEP_CLIENT_ID=your_client_id
EIGHT_SLEEP_CLIENT_SECRET=your_client_secretAdd to Claude Desktop's config (Settings → Developer → Edit Config):
{
"mcpServers": {
"eight_sleep": {
"command": "node",
"args": ["/absolute/path/to/eight-sleep-mcp/build/index.js"],
"env": {
"EIGHT_SLEEP_EMAIL": "your_email", // email and password not required once you have userid
"EIGHT_SLEEP_PASSWORD": "your_password", // email and password not required once you have userid
"EIGHT_SLEEP_USER_ID": "your_user_id",
"EIGHT_SLEEP_CLIENT_ID": "your_client_id", // optional
"EIGHT_SLEEP_CLIENT_SECRET": "your_client_secret" // optional
}
}
}
}Important: Adding your user ID to the configuration is required to avoid having to authenticate with email/password on every request. Make sure to get it using one of the methods above.
Restart Claude Desktop after saving.
getUsers- Get user profile informationgetUserPreferences- Get user preferences (units, timezone, bed side)updateUserPreferences- Update user preferences
getDeviceStatus- Get device status (online, firmware, water level)setDevicePower- Turn device on/offgetPresence- Check if user is in bed
getTemperature- Get current temperature settingssetTemperature- Set immediate temperature (-100 to 100)getTemperatureSchedules- Get temperature schedulessetTemperatureSchedule- Create temperature scheduleupdateTemperatureSchedule- Update temperature scheduledeleteTemperatureSchedule- Delete temperature schedule
getSleepData- Get detailed sleep data for date rangegetSleepScore- Get sleep score for a dategetSleepStages- Get sleep stages (awake, light, deep, REM)getHrv- Get Heart Rate Variability datagetHeartRate- Get heart rate datagetRespiratoryRate- Get respiratory rate datagetSleepTiming- Get bedtime and wake timegetSleepFitnessTrends- Get sleep fitness trends
getAlarms- Get all alarmssetAlarm- Create new alarmupdateAlarm- Update existing alarmdeleteAlarm- Delete alarm
For date-based functions, use the format YYYY-MM-DD. For example:
getSleepData({
startDate: "2024-03-15",
endDate: "2024-03-16" // optional
})For temperature settings:
setTemperature({
level: 50, // -100 to 100
duration: 3600 // seconds, optional
})For alarms:
setAlarm({
time: "07:00",
daysOfWeek: [1,2,3,4,5], // Mon-Fri
vibration: true,
sound: "chime" // optional
})For temperature schedules:
setTemperatureSchedule({
startTime: "22:00",
level: -20,
daysOfWeek: [0,1,2,3,4,5,6] // Every day
})