Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
Description from the maker (original English)
Skylight Calendar for Claude — family events, chores, and rewards.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
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, SKYLIGHT_UPLOAD_DIRValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"skylight": {
"command": "npx",
"args": [
"-y",
"skylight-mcp"
],
"env": {
"SKYLIGHT_REFRESH_TOKEN": "your-value",
"SKYLIGHT_EMAIL": "your-value",
"SKYLIGHT_PASSWORD": "your-value",
"SKYLIGHT_FRAME_ID": "your-value",
"SKYLIGHT_NAME": "your-value",
"SKYLIGHT_TOKEN_CACHE": "your-value",
"SKYLIGHT_TOKEN_FILE": "your-value",
"SKYLIGHT_BASE_URL": "your-value",
"SKYLIGHT_APPLE_APP_PASSWORD": "your-value",
"SKYLIGHT_APPLE_ID": "your-value",
"SKYLIGHT_UPLOAD_DIR": "your-value"
}
}
}
}Run this in your terminal
claude mcp add skylight --env SKYLIGHT_REFRESH_TOKEN=your-value --env SKYLIGHT_EMAIL=your-value --env SKYLIGHT_PASSWORD=your-value --env SKYLIGHT_FRAME_ID=your-value --env SKYLIGHT_NAME=your-value --env SKYLIGHT_TOKEN_CACHE=your-value --env SKYLIGHT_TOKEN_FILE=your-value --env SKYLIGHT_BASE_URL=your-value --env SKYLIGHT_APPLE_APP_PASSWORD=your-value --env SKYLIGHT_APPLE_ID=your-value --env SKYLIGHT_UPLOAD_DIR=your-value -- npx -y skylight-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"skylight": {
"command": "npx",
"args": [
"-y",
"skylight-mcp"
],
"env": {
"SKYLIGHT_REFRESH_TOKEN": "your-value",
"SKYLIGHT_EMAIL": "your-value",
"SKYLIGHT_PASSWORD": "your-value",
"SKYLIGHT_FRAME_ID": "your-value",
"SKYLIGHT_NAME": "your-value",
"SKYLIGHT_TOKEN_CACHE": "your-value",
"SKYLIGHT_TOKEN_FILE": "your-value",
"SKYLIGHT_BASE_URL": "your-value",
"SKYLIGHT_APPLE_APP_PASSWORD": "your-value",
"SKYLIGHT_APPLE_ID": "your-value",
"SKYLIGHT_UPLOAD_DIR": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"skylight": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"skylight-mcp"
],
"env": {
"SKYLIGHT_REFRESH_TOKEN": "your-value",
"SKYLIGHT_EMAIL": "your-value",
"SKYLIGHT_PASSWORD": "your-value",
"SKYLIGHT_FRAME_ID": "your-value",
"SKYLIGHT_NAME": "your-value",
"SKYLIGHT_TOKEN_CACHE": "your-value",
"SKYLIGHT_TOKEN_FILE": "your-value",
"SKYLIGHT_BASE_URL": "your-value",
"SKYLIGHT_APPLE_APP_PASSWORD": "your-value",
"SKYLIGHT_APPLE_ID": "your-value",
"SKYLIGHT_UPLOAD_DIR": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
SKYLIGHT_EMAIL envSKYLIGHT_FRAME_ID envSKYLIGHT_NAME envSKYLIGHT_TOKEN_CACHE envSKYLIGHT_TOKEN_FILE envSKYLIGHT_BASE_URL envSKYLIGHT_APPLE_ID envSKYLIGHT_UPLOAD_DIR envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified with the GitHub account chrischall, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: SKYLIGHT_REFRESH_TOKEN, SKYLIGHT_PASSWORD, SKYLIGHT_APPLE_APP_PASSWORD
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.6.0) reached the registry yesterday.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Agent-Native Google Calendar - manage events, sync, and public booking
Lets AI create and edit Excel files itself, including formulas, charts and PivotTables, without Excel installed.
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
MCP server for Skylight Calendar — 115 tools across calendar events (read+write), shared lists (read+write), chores and rewards (read+write), task-box items (read+write), meals (read+write), AI auto-creation (meal-plan + activity-idea generators with draft review/approve), messages and albums (read+write), photo/video upload, and frame/device/account settings + calendar + member management (read+write, incl. preset and custom-photo avatars).
Every API request carries the skylight-api-version: 2026-05-01 header (matching the official mobile app); without it some features 422 with "API version does not support …".
The server uses the official TypeScript SDK v2 and supports the stateless 2026-07-28 protocol revision over stdio. Clients can discover and call tools without an initialization handshake. Existing clients can still use the 2025-11-25 handshake.
The transport remains stdio. A host can expose it over authenticated HTTP. This package does not open a network listener.
The server uses a headless email+password OAuth2 authorization-code flow — no SSO, no 2FA, no browser extension required. Configure it with SKYLIGHT_REFRESH_TOKEN if you already hold a token, or SKYLIGHT_EMAIL + SKYLIGHT_PASSWORD to log in for one.
On first tool call, the server performs four steps against https://app.ourskylight.com:
GET /auth/session/new — fetch the Rails CSRF token and session cookie.POST /auth/session — log in with email + password (must happen before OAuth authorize).GET /oauth/authorize — send an S256 PKCE code_challenge (the server requires it) and receive the one-time authorization code via redirect.POST /oauth/token — exchange the code plus the matching code_verifier for a bearer access_token + refresh_token (currently a 24-hour expiry; the client reads the returned expires_in rather than assuming).OAuth redirects stay on the authentication origin. Relative redirects resolve against the current URL. The configured callback supplies the authorization code without receiving a request or session cookie. Unexpected destinations fail without including the redirect URL in the error.
The client then refreshes the token proactively (~60 s before expiry) and reactively on any 401. No bot wall has been observed — the headless flow works directly from Node.
No env vars → clean start: if credentials are not set, the server still starts without error. Auth is deferred to the first tool call, so MCP hosts can complete install-time tool listing before credentials are configured.
The package also exports Skylight's session login and refresh, so a separate program can authenticate without copying src/:
import { login, refresh } from 'skylight-mcp/auth';
const tokens = await login({ authBaseUrl: 'https://app.ourskylight.com', email: process.env.SKYLIGHT_EMAIL!, password: process.env.SKYLIGHT_PASSWORD!, }); // Skylight rotates refresh tokens: store the one each call returns. const next = await refresh({ authBaseUrl: 'https://app.ourskylight.com', refreshToken: tokens.refreshToken });
This is the only library entry point; everything else in the package is the MCP server. It is ESM-only and ships type declarations.
All data in Skylight is scoped to a *frame* (the family hub device). On first use the client auto-discovers the single frame on the account. If the account has more than one frame, set SKYLIGHT_FRAME_ID to the frame ID you want. Every tool that reads frame-scoped data accepts an optional frameId arg to override the default.
| Module | Tool | R/W | Description |
|---|---|---|---|
| frames | skylight_list_frames | R | List all frames on the account |
| frames | skylight_get_frame | R | Get details for a specific frame |
| frames | skylight_list_frame_members | R | List members associated with a frame |
| frames | skylight_list_devices | R | List physical devices linked to a frame |
| frames | skylight_get_plus_access | R | Get Skylight Plus subscription / entitlement status |
| frames | skylight_get_reward_points | R | Get reward-point balances per family member |
| frames | skylight_get_household_config | R | Get household configuration for the frame |
| frames | skylight_list_calendars | R | List the frame's calendar accounts and active calendars |
| frames | skylight_get_event_notification_settings | R | Get the frame's calendar-event notification settings |
| frames | skylight_resolve_member | R | Resolve a family-member name to its category id |
| frames | skylight_get_calendar | R | Get one calendar account |
| frames | skylight_list_nudges | R | List nudges (reminders) in a date range |
| frames | skylight_update_frame | W | Update frame display/sleep settings |
| frames | skylight_rename_frame | W | Rename a frame |
| frames | skylight_update_profile | W | Update the frame profile (name, birthday) |
| frames | skylight_update_household_config | W | Update household configuration |
| frames | skylight_set_reminder_profile | W | Set the global reminder cadence (interval_weeks) |
| frames | skylight_add_webcal | W | Subscribe the frame to a webcal/ICS calendar URL |
| frames | skylight_update_calendar | W | Set which sub-calendars of a connected account are active |
| frames | skylight_delete_source_calendar | W | Remove a connected source calendar (incl. webcal subscriptions) |
| frames | skylight_set_default_calendar | W | Set the default source calendar for new events |
| frames | skylight_link_apple_calendar | W | Link an Apple/iCloud calendar; the app-specific password comes from SKYLIGHT_APPLE_APP_PASSWORD, never a tool argument (confirm-gated) |
| frames | skylight_categorize_source_calendar | W | Attribute a source calendar's events to one or more family members |
| frames | skylight_create_source_calendar | W | Create a source calendar from raw provider attributes (advanced) |
| frames | skylight_invite_user | W | Invite a user to the frame by email (confirm-gated) |
| frames | skylight_approve_user | W | Approve a pending frame user (confirm-gated) |
| frames | skylight_remove_user | W | Remove a user from the frame (confirm-gated; the preview names the member) |
| frames | skylight_delete_category | W | Delete a category / family member (optional reassign_to_category_id, inferred; confirm-gated, the preview names the member) |
| frames | skylight_update_family_member | W | Update a family member's profile — birthday, dietary preferences (the name is the category label; set via skylight_update_category) |
| frames | skylight_update_category | W | Update a category — rename/recolor, or convert a label into a family-member profile (linked_to_profile) |
| frames | skylight_create_category | W | Create a category / family member (optional linked_to_profile, avatar_id) |
| frames | skylight_list_avatars | R | List the preset avatar library (emoji/icon images) |
| frames | skylight_set_member_avatar | W | Set a family member's avatar to a custom photo (confirm-gated) |
| frames | skylight_set_device_album | W | Set which photo album a device displays (inferred) |
| frames | skylight_rename_device | W | Rename a Skylight device |
| events | skylight_list_events | R | List calendar events within a date range |
| events | skylight_get_event | R | Get details for a specific event |
| events | skylight_create_event | W | Create a new calendar event (optional category_ids assigns members; confirm-gated when invited_emails is set, the preview names every recipient) |
| events | skylight_update_event | W | Update an existing calendar event (optional category_ids assigns members; confirm-gated when invited_emails is set) |
| events | skylight_delete_event | W | Delete a calendar event |
| events | skylight_list_categories | R | List event categories for a frame |
| events | skylight_list_source_calendars | R | List external source calendars linked to a frame |
| events | skylight_list_recent_invited_emails | R | List recently-invited email addresses |
| events | skylight_update_event_notification_settings | W | Update calendar-event notification settings |
| lists | skylight_list_lists | R | List all shared lists on a frame |
| lists | skylight_get_list_items | R | Get items in a specific shared list |
| lists | skylight_create_list | W | Create a new shared list (label + color + kind) |
| lists | skylight_update_list | W | Update a list's name, color, or type |
| lists | skylight_delete_list | W | Delete a shared list and its items (confirm-gated when the list has items; the preview lists them) |
| lists | skylight_add_list_item | W | Add an item to a shared list |
| lists | skylight_update_list_item | W | Rename a list item, check/uncheck it, or set its section |
| lists | skylight_delete_list_item | W | Delete an item from a shared list |
| lists | skylight_delete_list_items | W | Bulk-delete specific list items |
| lists | skylight_move_list_item | W | Reorder a list item |
| lists | skylight_clear_list | W | Remove all items from a list (single bulk delete; confirm-gated, the preview lists the items) |
| lists | skylight_set_list_item_section | W | Move list items into a named section (or clear it) |
| chores | skylight_list_chores | R | List chores within a date range |
| chores | skylight_search_chores | R | Search chores (incl. unscheduled/template chores) |
| chores | skylight_create_chore | W | Create a new chore (summary + category) |
| chores | skylight_create_recurring_chore | W | Create a recurring chore or routine (RRULE) |
| meals | skylight_update_meal | W | Update a planned meal (nam
Only the beginning is shown; read the rest in the repo