Skip to main content
Glama
xybstone

macOS Calendar MCP Server

by xybstone
README.md
# macOS Calendar MCP Server

A Model Context Protocol (MCP) server for seamless macOS Calendar integration using AppleScript. No OAuth setup required!

## Features

- 🍎 **Native macOS Integration** - Uses AppleScript to interact directly with macOS Calendar
- 📅 **Full Calendar Management** - Create, list, and search calendar events
- 🚀 **Zero Configuration** - No OAuth, no API keys, just works out of the box
- 🔧 **MCP Compatible** - Works with Claude Code CLI and other MCP clients
- 📱 **Multi-Calendar Support** - Works with all your calendars (Personal, Work, etc.)

## Quick Start

### Prerequisites

- macOS (required for AppleScript support)
- Node.js 16+ 
- Calendar app (pre-installed on macOS)

### Installation

1. Clone the repository:
```bash
git clone https://github.com/xybstone/macos-calendar-mcp.git
cd macos-calendar-mcp
```

2. Install dependencies:
```bash
npm install
```

3. Grant permissions:
   - When first run, macOS will ask for Calendar app permissions
   - Grant access to allow the MCP server to manage your calendars

### Usage with Claude Code CLI

Add to your `.claude_project` file:

```json
{
  "mcpServers": {
    "macos-calendar": {
      "command": "node",
      "args": ["/path/to/macos-calendar-mcp/macos-calendar-mcp.js"]
    }
  }
}
```

Or run directly:
```bash
node macos-calendar-mcp.js
```

## Available Tools

| Tool | Description | Parameters |
|------|-------------|------------|
| `list-calendars` | List all available calendars | None |
| `create-event` | Create a new calendar event | `title`, `startDate`, `endDate`, `calendar`, `description`, `location` |
| `list-today-events` | List today's events | `calendar` (optional) |
| `search-events` | Search events by keyword | `query`, `calendar` (optional) |

## Examples

### Create an Event
```javascript
{
  "title": "Team Meeting",
  "startDate": "2025-07-05 14:00",
  "endDate": "2025-07-05 15:00", 
  "calendar": "Work",
  "description": "Weekly team sync",
  "location": "Conference Room A"
}
```

### List Calendars
```javascript
// Returns all available calendars
```

### Search Events
```javascript
{
  "query": "meeting",
  "calendar": "Work"
}
```

## Date Format

Use the format: `YYYY-MM-DD HH:MM` (24-hour format)

Examples:
- `2025-07-05 14:00` (2:00 PM)
- `2025-12-25 09:30` (9:30 AM)
- `2025-07-10 18:00` (6:00 PM)

**Time Zone Handling:**
- Uses native macOS time handling to avoid timezone conversion issues
- All times are interpreted in your system's local timezone
- No UTC conversion or daylight saving adjustments needed

## Supported Calendars

Works with all macOS Calendar calendars including:
- Personal calendars
- Work calendars  
- Shared calendars
- Subscribed calendars (iCloud, Google, etc.)

## Troubleshooting

### Permission Issues
If you get permission errors:
1. Open System Preferences → Security & Privacy → Privacy
2. Select "Calendar" from the left sidebar
3. Ensure Terminal (or your app) has access

### AppleScript Errors
- Ensure Calendar app is installed and accessible
- Check calendar names are correct (case-sensitive)
- Verify date formats match the expected pattern

### Time Zone Issues
If events appear at wrong times:
1. Check your system timezone settings
2. Use the `fix-event-times` tool to correct existing events
3. Ensure date format is `YYYY-MM-DD HH:MM` in 24-hour format
4. The MCP uses native macOS time handling to avoid conversion issues

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Test thoroughly on macOS
5. Submit a pull request

## License

MIT License - see [LICENSE](LICENSE) file for details.

## Why This MCP?

Unlike Google Calendar integrations that require complex OAuth setups, this MCP:
- ✅ Works immediately with no configuration
- ✅ Integrates with your existing macOS Calendar setup
- ✅ Supports all calendar sources (iCloud, Google, Exchange, etc.)
- ✅ Requires no internet connection for basic operations
- ✅ Respects your privacy - everything runs locally

Perfect for developers who want calendar integration without the OAuth headache!

## Privacy & Security

- ✅ **Local Processing**: All calendar operations run locally on your machine
- ✅ **No Data Upload**: Your calendar data never leaves your device
- ✅ **Privacy Focused**: No OAuth tokens, no cloud services, no tracking
- ⚠️ **Private Data**: When testing, avoid committing files containing personal events to public repositories

## Data Protection

The project includes `.gitignore` patterns to prevent accidental commits of private event data:
- `*events*.json` - Event data files
- `*meetings*.json` - Meeting schedules  
- `*schedule*.json` - Schedule files
- `private-*.json` - Any private data files

TDQS

B3.1/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have distinct purposes, but 'list-today-events' and 'list-week-events' could be confused with 'search-events' as they all retrieve events. The descriptions clarify that 'list-today-events' and 'list-week-events' are time-specific listings, while 'search-events' is keyword-based, but the overlap in functionality might cause misselection in some contexts.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with hyphens (e.g., create-event, list-calendars, delete-events-by-keyword). The naming is predictable and readable throughout the set, with no deviations in style or convention.

Tool Count5/5

With 8 tools, the server is well-scoped for macOS calendar management. Each tool serves a clear purpose, such as creating, listing, deleting, and fixing events, without unnecessary redundancy or bloat, making it appropriate for the domain.

Completeness4/5

The tool set covers core operations like creating, listing, searching, and deleting events, as well as managing calendars. However, there are minor gaps, such as the lack of an 'update-event' tool for modifying existing events, which agents might need to work around by deleting and recreating events.

Maintenance

ActivityInactive
ResponsivenessNo issues