# skylight-mcp

Connects Skylight Calendar to AI agents for tracking household events, chores, rewards, and frame configurations through 114 tools.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 16
- Author: chrischall
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/chrischall/skylight-mcp
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/mcp/skylight-mcp

## What it does

The server links MCP clients with Skylight Calendar over stdio using official TypeScript SDK v2 primitives. It provides 114 tools covering calendar entries, family member profiles, chore lists, meal ideas, and photo uploads. Every request to the backend includes the `skylight-api-version: 2026-05-01` header to avoid version mismatch errors.

Authentication runs headlessly via `SKYLIGHT_EMAIL` and `SKYLIGHT_PASSWORD` using S256 PKCE, or through an existing `SKYLIGHT_REFRESH_TOKEN`. You do not need to configure credentials just to boot the process, because authentication triggers only on the first tool invocation. If your account contains more than one device, setting `SKYLIGHT_FRAME_ID` is required to route requests to the intended hub.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `SKYLIGHT_REFRESH_TOKEN`, `SKYLIGHT_EMAIL`, `SKYLIGHT_PASSWORD`, `SKYLIGHT_FRAME_ID`, `SKYLIGHT_NAME`, `SKYLIGHT_TOKEN_CACHE`, `SKYLIGHT_TOKEN_FILE`, `SKYLIGHT_BASE_URL`, `SKYLIGHT_APPLE_APP_PASSWORD`, `SKYLIGHT_APPLE_ID` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env SKYLIGHT_REFRESH_TOKEN=<SKYLIGHT_REFRESH_TOKEN> --env SKYLIGHT_EMAIL=<SKYLIGHT_EMAIL> --env SKYLIGHT_PASSWORD=<SKYLIGHT_PASSWORD> --env SKYLIGHT_FRAME_ID=<SKYLIGHT_FRAME_ID> --env SKYLIGHT_NAME=<SKYLIGHT_NAME> --transport stdio skylight-mcp -- npx -y skylight-mcp
```
Replace <…> with your own values. 6 more environment variables are in the server README

### Codex

**Platform CLI**
```bash
codex mcp add skylight-mcp --env SKYLIGHT_REFRESH_TOKEN=<SKYLIGHT_REFRESH_TOKEN> --env SKYLIGHT_EMAIL=<SKYLIGHT_EMAIL> --env SKYLIGHT_PASSWORD=<SKYLIGHT_PASSWORD> --env SKYLIGHT_FRAME_ID=<SKYLIGHT_FRAME_ID> --env SKYLIGHT_NAME=<SKYLIGHT_NAME> -- npx -y skylight-mcp
```
Replace <…> with your own values. 6 more environment variables are in the server README

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "skylight-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "skylight-mcp"
            ],
            "env": {
                "SKYLIGHT_REFRESH_TOKEN": "<SKYLIGHT_REFRESH_TOKEN>",
                "SKYLIGHT_EMAIL": "<SKYLIGHT_EMAIL>",
                "SKYLIGHT_PASSWORD": "<SKYLIGHT_PASSWORD>",
                "SKYLIGHT_FRAME_ID": "<SKYLIGHT_FRAME_ID>",
                "SKYLIGHT_NAME": "<SKYLIGHT_NAME>"
            }
        }
    }
}
```
Replace <…> with your own values. 6 more environment variables are in the server README

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "skylight-mcp": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "skylight-mcp"
            ],
            "env": {
                "SKYLIGHT_REFRESH_TOKEN": "<SKYLIGHT_REFRESH_TOKEN>",
                "SKYLIGHT_EMAIL": "<SKYLIGHT_EMAIL>",
                "SKYLIGHT_PASSWORD": "<SKYLIGHT_PASSWORD>",
                "SKYLIGHT_FRAME_ID": "<SKYLIGHT_FRAME_ID>",
                "SKYLIGHT_NAME": "<SKYLIGHT_NAME>"
            }
        }
    }
}
```
Replace <…> with your own values. 6 more environment variables are in the server README

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e SKYLIGHT_REFRESH_TOKEN=<SKYLIGHT_REFRESH_TOKEN> -e SKYLIGHT_EMAIL=<SKYLIGHT_EMAIL> -e SKYLIGHT_PASSWORD=<SKYLIGHT_PASSWORD> -e SKYLIGHT_FRAME_ID=<SKYLIGHT_FRAME_ID> -e SKYLIGHT_NAME=<SKYLIGHT_NAME> skylight-mcp npx -y skylight-mcp
```
Replace <…> with your own values. 6 more environment variables are in the server README

## When to use it
- sync calendar schedules and track family events
- assign household chores and monitor reward points
- subscribe the display to external webcal feeds
- update device sleep times and screen profiles

## Example prompts
- "List all calendar events scheduled on the Skylight frame for tomorrow"
- "Check the current chore reward points balance for all family members"
- "Subscribe our frame to this webcal calendar link"

## Similar
- [Reactive Resume](https://affpapa.org/en/nevibecode/mcp/reactive-resume.md) — MCP server · ★ 44874
- [screenpipe](https://affpapa.org/en/nevibecode/mcp/screenpipe.md) — MCP server · ★ 22053
- [Inbox Zero](https://affpapa.org/en/nevibecode/mcp/inbox-zero.md) — MCP server · ★ 12791
- [kaneo](https://affpapa.org/en/nevibecode/mcp/kaneo.md) — MCP server · ★ 9602
- [Mindwtr](https://affpapa.org/en/nevibecode/mcp/mindwtr.md) — MCP server · ★ 2318
- [Azure DevOps (ADO)](https://affpapa.org/en/nevibecode/mcp/azure-devops-ado.md) — MCP server · ★ 2067

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
