Apple Calendar MCP Server
A Model Context Protocol (MCP) server that connects to Apple Calendar via a local Eventlink instance.
Features
- Fetch Events: Get calendar events for specific dates or ranges.
- Natural Language Dates: Supports "today", "tomorrow", "next Monday".
- Create Events: Add new events to your calendar.
- SSE Transport: Runs as a local web service.
- MacOS Integration: Runs automatically at login via Launch Agent.
Prerequisite
- Eventlink: You must have Eventlink (or compatible server) running locally.
- Node.js: Version 18+ (LTS recommended).
Installation
- Clone this repository.
- Copy
.env.exampleto.envand configure your settings:
cp .env.example .env
EVENTLINK_TOKEN: Your Eventlink bearer token.EVENTLINK_URL: URL to Eventlink (default:http://localhost:9000).PORT: Port for this MCP server (default:6372).
- Run the installation script:
./install.sh
This will:
- Install dependencies.
- Build the project.
- Create and load a macOS Launch Agent to keep the server running in the background.
Usage
Managing the Server
- Start:
./start.sh(Manually start the background service) - Stop:
./stop.sh(Stop the background service) - Uninstall:
./uninstall.sh(Remove the service and clean up)
Connecting to Claude Desktop / Clients
Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"apple-calendar": {
"command": "node",
"args": ["/path/to/mcp-server-apple-calendar/dist/index.js"],
"env": {
"EVENTLINK_TOKEN": "your_token",
"EVENTLINK_URL": "http://localhost:9000"
}
}
}
}
Note: The install script sets up a background service listening on SSE (typically http://localhost:6372/sse). If your client supports SSE over HTTP, point it there. For Claude Desktop, using stdio (command execution) as shown above is also supported if you prefer not to use the background service, but this server is optimized for background execution.
Wait, this server is designed for SSE primarily via the background service.
If you want to use the SSE endpoint: URL: http://localhost:6372/sse
Tools
calendar_get_events
Fetches events for a given date.
date(string): "YYYY-MM-DD", "today", "tomorrow", "next Monday".offset(number): Number of days (default: 1).calendarName(string): Optional calendar override.
calendar_create_event
Creates a new event.
title(string): Event title.startDate(string): "YYYY-MM-DD HH:MM".endDate(string): "YYYY-MM-DD HH:MM".notes(string): Optional notes.
License
MIT











