Skip to main content

Read-only Mac Calendar MCP server with indexed archive search.

Project description

Mac Calendar MCP

Python 3.11+ License: GPL v3 macOS MCP Code style: ruff

Read-only Mac Calendar MCP server with indexed archive search. It exposes Apple Calendar data to MCP clients through a small read surface for listing calendars, browsing event ranges, reading event details, searching archived events, and building agendas.

This package is developed in the apple-app-mcp workspace alongside Mac Mail MCP.

Quick Start

pipx install mac-calendar-mcp

Add to your MCP client:

{
  "mcpServers": {
    "calendar": {
      "command": "mac-calendar-mcp",
      "args": ["--watch", "serve"]
    }
  }
}

Build the Search Index (Recommended)

# Requires Calendar automation permission for Terminal or your MCP client
# System Settings -> Privacy & Security -> Automation

mac-calendar-mcp index

The index enables fast archive search and date-range reads from a local SQLite and FTS5 database.

Run the MCP server with watch mode to keep the index current while events change in Calendar.app:

mac-calendar-mcp serve --watch

The server performs a background sync at startup. Watch mode then checks Calendar's local SQLite database, WAL, and SHM files every 3600 seconds and refreshes the index when those files change. Override the interval with --watch-interval SECONDS when you need faster or slower updates.

Configure (Optional)

mac-calendar-mcp init   # writes ~/.mac-calendar-mcp/config.toml

Mac Calendar MCP reads settings from environment variables and an optional TOML config file at $HOME/.mac-calendar-mcp/config.toml. The init command writes a commented template with every available key and refuses to overwrite an existing config unless --force is passed.

Common environment variables:

Variable Purpose
APPLE_CALENDAR_INDEX_PATH Override the SQLite index location.
APPLE_CALENDAR_INDEX_STALENESS_HOURS Hours before an index is considered stale.
APPLE_CALENDAR_INDEX_CALENDARS Comma-separated calendar names or IDs to index; unset indexes all calendars.
APPLE_CALENDAR_INDEX_PAST_YEARS Historical indexing window; defaults to 1 year.
APPLE_CALENDAR_INDEX_FUTURE_YEARS Limit future indexing window.
APPLE_CALENDAR_DEFAULT_CALENDARS Comma-separated tool-default calendar names or IDs when calendar_ids is omitted.

[defaults].calendars only controls MCP tool defaults. [index].calendars controls which calendars are stored in the local search index.

Tools

Tool Purpose
list_calendars() List accessible calendars
get_events(start, end, calendar_ids?, limit?, offset?) List event occurrences in a date range
get_event(event_id, occurrence_start?) Get full event or occurrence detail
search_events(query, start?, end?, calendar_ids?, fields?, limit?, offset?) Search indexed event archives
get_agenda(start?, days?, calendar_ids?) Chronological agenda helper
calendar_index_status() Index health and coverage summary

All tools are read-only. The server does not create, update, delete, RSVP, subscribe to calendars, or open Calendar.app UI in v1.

Search and Indexing

Calendar search is backed by SQLite and FTS5. Indexed fields include event title, location, notes, URL, attendee names/emails, and calendar name.

Recurring events are expanded into occurrence rows for listing and search. The current recurrence layer supports common daily, weekly, monthly, and yearly patterns, including intervals, counts, until dates, weekly BYDAY, and Calendar exception dates. Unsupported recurrence rules are counted in index status instead of being silently treated as complete.

Configuration

Per-client env overrides via the MCP client's launch config work:

{
  "mcpServers": {
    "calendar": {
      "command": "mac-calendar-mcp",
      "env": {
        "APPLE_CALENDAR_DEFAULT_CALENDARS": "Work,Personal",
        "APPLE_CALENDAR_INDEX_FUTURE_YEARS": "2"
      }
    }
  }
}

The default index path is $HOME/.mac-calendar-mcp/index.db.

CLI Usage

All read tools are also available as standalone CLI commands:

mac-calendar-mcp calendars
mac-calendar-mcp init
mac-calendar-mcp index
mac-calendar-mcp status
mac-calendar-mcp search "quarterly planning" --limit 10
mac-calendar-mcp events 2026-05-01 2026-06-01 --limit 50
mac-calendar-mcp agenda --days 7
mac-calendar-mcp rebuild

All data commands output JSON where practical.

Development

git clone https://github.com/wagamama/apple-app-mcp
cd apple-app-mcp
uv sync
uv run ruff check packages/mac-calendar-mcp/src
uv run --package mac-calendar-mcp pytest packages/mac-calendar-mcp/tests
uv build --package mac-calendar-mcp

See CALENDAR.md for domain architecture, tool design, testing guidance, and implementation notes.

License

GPL-3.0-or-later

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mac_calendar_mcp-0.5.10.tar.gz (28.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mac_calendar_mcp-0.5.10-py3-none-any.whl (26.3 kB view details)

Uploaded Python 3

File details

Details for the file mac_calendar_mcp-0.5.10.tar.gz.

File metadata

  • Download URL: mac_calendar_mcp-0.5.10.tar.gz
  • Upload date:
  • Size: 28.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for mac_calendar_mcp-0.5.10.tar.gz
Algorithm Hash digest
SHA256 0218a611ed3aba44c752de3952181ddb7db3b66b031d2a34b40c8076b5a66bf7
MD5 3dadfe10163a0f0fda8501d1182e2999
BLAKE2b-256 ebddb714ac6827cff1c8ca5c8cccb42080555e0838da287ed12864caebeb6aa7

See more details on using hashes here.

Provenance

The following attestation bundles were made for mac_calendar_mcp-0.5.10.tar.gz:

Publisher: release.yml on wagamama/apple-app-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mac_calendar_mcp-0.5.10-py3-none-any.whl.

File metadata

File hashes

Hashes for mac_calendar_mcp-0.5.10-py3-none-any.whl
Algorithm Hash digest
SHA256 e709a4ae23e0e239d0db92e2cfc15d6bfd01edea4e28fd36cadb256f6e9733fc
MD5 a8f1ae0644d4ac3a58f5dbd57699c27f
BLAKE2b-256 b6bf803d33fcfc613116694310006cddfc613c0cb453ae07f4c73d545299c3fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for mac_calendar_mcp-0.5.10-py3-none-any.whl:

Publisher: release.yml on wagamama/apple-app-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page