nucleus-apple-mcp
Provides tools for interacting with Apple Calendar, Reminders, Notes, and Health data on macOS, enabling reading schedules, managing tasks, searching notes, and retrieving health metrics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nucleus-apple-mcp Show my calendar events for tomorrow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
⚛️ Nucleus: macOS Life Context Server
Give your AI Agent a Hippocampus.
nucleus-apple-mcp is a Model Context Protocol (MCP) server designed to unify your digital life on macOS. It allows AI agents (like Claude Desktop, Cursor, or custom agents) to securely read and interact with your personal data ecosystem.
Unlike fragile PyObjC bridges, Nucleus uses a hybrid architecture: a Python MCP server that orchestrates lightweight, JIT-compiled native Swift workers. This ensures type-safe, performant, and reliable access to Apple's native APIs while remaining easily distributable via uvx.
For a product overview and setup path, see docs/introducing-nucleus.md. Download the iOS app from the App Store: Nucleus Context Hub.
🔌 Integrations
✅ Available (current release)
📅 Calendar: Fetch upcoming schedules, check availability, and create events via
EventKit.✅ Reminders: Read pending tasks and manage your to-do lists via
EventKit.📝 Notes: List/search notes, read content, and add/export attachments via Notes.app (Apple Events).
❤️ Health: Read exported Apple Health metrics and raw samples from an S3-compatible object store.
🏗 Architecture
Python: Handles the MCP protocol, request routing, and distribution (pip/uv).
Swift: Embedded source code acts as a "Sidecar." It is compiled locally on the first run (using SwiftPM
swift build) to interface directly with macOS private frameworks, bypassing the limitations of Python-Objective-C bridges.
📦 Swift Sidecar Layout
Swift Package Root:
src/nucleus_apple_mcp/sidecar/swift/(includesPackage.swift; CLI usesswift-argument-parser)Build Cache (macOS):
~/Library/Caches/nucleus-apple-mcp/sidecar/<build_id>/nucleus-apple-sidecarOptional Env Vars:
NUCLEUS_APPLE_MCP_CACHE_DIR(overrides cache directory),NUCLEUS_SWIFT(swift path),NUCLEUS_SWIFTC(swiftc path)
🚀 Usage
# Run the CLI directly.
uvx --from nucleus-apple-mcp nucleus-apple health list-sample-catalog
# Or run the MCP server.
uvx nucleus-apple-mcpRelated MCP server: macos-mcp-tools
🧰 CLI
Install the package once and use the unified nucleus-apple command:
uv tool install nucleus-apple-mcpExamples:
# Calendar
nucleus-apple calendar list-events --start 2026-03-15T09:00:00+08:00 --end 2026-03-15T18:00:00+08:00 --pretty
# Reminders
nucleus-apple reminders list-reminders --due-end 2026-03-20 --pretty
# Notes
nucleus-apple notes list-notes --query project --include-plaintext-excerpt --pretty
# Health
nucleus-apple health read-daily-metrics --date 2026-03-14 --prettyThe CLI mirrors the MCP tool surface and emits JSON, which makes it suitable for shell automation and agent skill workflows.
🔧 Add as an MCP server
This server uses the stdio transport (a local subprocess). The first run will compile the Swift sidecar.
Codex CLI
# Add the server (writes to ~/.codex/config.toml)
codex mcp add nucleus-apple -- uvx nucleus-apple-mcp
# Verify
codex mcp listClaude Code
# Add the server (use --scope user to make it available globally)
claude mcp add --scope user nucleus-apple -- uvx nucleus-apple-mcp
# Verify
claude mcp listYou can also launch the server through the CLI:
nucleus-apple mcp serve🪝 OpenClaw + Hermes Agent Skills
This repository includes reusable agent skills under skills/ for:
nucleus-apple-calendarnucleus-apple-remindersnucleus-apple-notesnucleus-apple-health
Each skill depends on the nucleus-apple binary and is designed to be reused without changing the command surface.
If your agent supports repo-based skill install via chat, you can say:
install skill https://github.com/zish-rob-crur/nucleus-apple-mcp nucleus-apple-healthAvailable Tools
30 toolscalendar.create_eventC
Create a calendar event.
Inputs: calendar_id (required), title (required), start (required), end (required), +5 more. Returns: object
calendar.delete_eventB
Delete a calendar event.
Inputs: event_id (required), span. Returns: object
calendar.list_calendarsC
List event calendars.
Inputs: source_id, include_hidden. Returns: object
calendar.list_eventsB
List events within a time range.
Inputs: start (required), end (required), calendar_id, source_id, +2 more. Returns: object
calendar.list_sourcesA
List calendar sources/accounts.
Inputs: include_empty. Returns: object
calendar.update_eventC
Update an existing calendar event.
Inputs: event_id (required), span, calendar_id, title, +11 more. Returns: object
health.analyze_rangeA
Analyze a Health date range using exported daily snapshots only. Returns metric summaries, segment trends, notable days, and brief insights without reading raw samples.
Inputs: start_date (required), end_date (required), metric_keys, segment_count, +1 more. Returns: object
health.inspect_dayA
Inspect one day by combining the daily snapshot with the raw manifest, and explain metric/raw gaps.
Inputs: date (required), metric_keys, type_keys, storage_backend. Returns: object
health.list_changesA
List health sync commits after an optional cursor, with optional per-date raw type details from raw manifests.
Inputs: since_cursor, limit, include_raw_types, storage_backend. Returns: object
health.list_sample_catalogA
List known Health raw sample types, kinds, tags, and how they relate to daily metrics.
Inputs: no named parameters. Returns: object
health.read_daily_metricsA
Read one day's exported Health metrics snapshot from an S3-compatible object store.
Inputs: date (required), storage_backend. Returns: object
health.read_daily_rawA
Read one day's raw Health samples. Prefer health.read_samples for range queries and richer filtering.
Inputs: date (required), max_records, type_keys, tags, +5 more. Returns: object
health.read_range_metricsA
Read a date range of exported daily metrics using monthly indexes. Missing dates are reported, not treated as an error.
Inputs: start_date (required), end_date (required), storage_backend. Returns: object
health.read_samplesB
Read raw Health samples across one or more dates, filtered by type_keys/tags/kinds, with manifest-aware pagination.
Inputs: start_date (required), end_date, type_keys, tags, +6 more. Returns: object
notes.add_attachmentC
Add attachment(s) to a note from local file paths.
Inputs: note_id (required), attach_file (required). Returns: object
notes.create_noteC
Create a new note.
Inputs: folder_id, title, plaintext, markdown, +1 more. Returns: object
notes.delete_noteA
Delete a note.
Inputs: note_id (required). Returns: object
notes.get_noteB
Fetch a note with optional content and attachments.
Inputs: note_id (required), include_plaintext, include_body_html, include_attachments. Returns: object
notes.list_accountsB
List Notes accounts.
Inputs: no named parameters. Returns: object
notes.list_attachmentsB
List attachments for a note.
Inputs: note_id (required), include_shared. Returns: object
notes.list_foldersC
List Notes folders.
Inputs: account_id, parent_folder_id, recursive, include_shared, +1 more. Returns: object
notes.list_notesB
List notes (metadata-first).
Inputs: account_id, folder_id, query, include_plaintext_excerpt, +4 more. Returns: object
notes.save_attachmentB
Export an attachment to a file path.
Inputs: attachment_id (required), output_path (required), overwrite. Returns: object
notes.update_noteC
Update an existing note.
Inputs: note_id (required), title, allow_destructive, set_plaintext, +4 more. Returns: object
reminders.create_reminderC
Create a reminder.
Inputs: list_id (required), title (required), start, due, +3 more. Returns: object
reminders.delete_reminderB
Delete a reminder.
Inputs: reminder_id (required). Returns: object
reminders.list_listsC
List reminder lists.
Inputs: source_id, include_hidden. Returns: object
reminders.list_remindersC
List reminders by filters.
Inputs: start, end, due_start, due_end, +4 more. Returns: object
reminders.list_sourcesB
List reminder sources/accounts.
Inputs: include_empty. Returns: object
reminders.update_reminderB
Update an existing reminder.
Inputs: reminder_id (required), list_id, title, start, +10 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 30 tools
Tools are clearly separated by domain prefixes (calendar, health, notes, reminders) and specific verb-noun combinations within each domain, eliminating any ambiguity between tools.
All tools follow a consistent pattern of domain prefix followed by verb_noun in snake_case, e.g., calendar.create_event, health.read_samples, notes.list_folders, providing a highly predictable naming scheme.
With 30 tools across four distinct domains (calendar, health, notes, reminders), the count is above average but well-justified by the breadth of functionality, averaging 7.5 tools per domain which is reasonable for feature-rich integrations.
Each domain provides comprehensive CRUD-like operations plus additional utilities: calendar covers events/sources, health includes analysis and raw data reads, notes cover attachments and folders, and reminders cover lists/sources. No obvious gaps for typical use cases.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server that provides AI assistants with natural language access to Apple Calendar, enabling reading, searching, creating, and managing calendar events.3MIT
- AlicenseNot gradedqualityBmaintenanceA collection of MCP servers for Apple macOS apps (Mail, Contacts, Notes, Memory, Messages, Calendar, Reminders) enabling AI assistants to read, search, create, and update data via JXA, SQLite, and EventKit.33 npmMIT
- AlicenseBqualityBmaintenanceEnables AI agents to directly access native macOS services, media, system health, and administration tools through a local MCP server.4018 npm1MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that connects ChatGPT to Apple Calendar via a local Mac agent, enabling event listing, searching, and creation while keeping data on your machine.MIT