mcp-eventkit
README.md
# mcp-eventkit
MCP server for Apple Reminders using the native [EventKit](https://developer.apple.com/documentation/eventkit) framework via PyObjC. No tokens, no sync services — reads and writes directly to the Reminders database on macOS.
## Requirements
- macOS (Apple Silicon or Intel)
- Python 3.13+
- [`uv`](https://docs.astral.sh/uv/)
- Reminders access granted in **System Settings → Privacy & Security → Reminders**
---
## Running
```bash
uv run --with mcp --with pyobjc-framework-EventKit python server.py
```
On first run, macOS will prompt for Reminders access. If denied, grant it in System Settings → Privacy & Security → Reminders, then restart.
---
## Available Tools
| Tool | Description | Destructive |
| ---- | ----------- | ----------- |
| `reminders_list_lists` | List all reminder lists | No |
| `reminders_list` | List reminders, filtered by list and/or completion status | No |
| `reminders_create` | Create a new reminder | No |
| `reminders_update` | Update title, notes, due date, priority, or completion | No |
| `reminders_delete` | Permanently delete a reminder | **Yes** |
All read tools support `response_format: "markdown"` (default) or `"json"`.
---
## Claude Desktop / Claude Code Config
Add to your MCP server config:
```json
{
"mcpServers": {
"reminders": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with", "mcp",
"--with", "pyobjc-framework-EventKit",
"python",
"/path/to/server.py"
]
}
}
}
```
Replace `/path/to/server.py` with the absolute path to this file.
---
## Known Limitations
- No support for subtasks, tags, location reminders, or recurring reminders
- Due dates are stored as `NSDateComponents` — timezone behavior depends on the system calendar
- macOS only (EventKit is not available on Linux/Windows)
## Contributing
Bug fixes and clear improvements are welcome — open a PR. For new features, please open an issue first to discuss before writing code. I'll merge fixes that are unambiguously correct, but make no guarantees on feature additions.
## License
MIT