Skip to main content
Glama
ajayjohn

Apple Calendar MCP Server

by ajayjohn
README.md
# 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

1.  **Eventlink**: You must have [Eventlink](https://dreetje-1.gitbook.io/eventlink/endpoints) (or compatible server) running locally.
2.  **Node.js**: Version 18+ (LTS recommended).

## Installation

1.  Clone this repository.
2.  Copy `.env.example` to `.env` and configure your settings:
    ```bash
    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`).

3.  Run the installation script:
    ```bash
    ./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`:

```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