Fantastical calendar MCP server — read events from Fantastical's local database, create via URL scheme
Project description
Fantastical MCP
An MCP server that gives AI assistants read/write access to your Fantastical calendar on macOS.
What it does
fantastical-mcp reads calendar events directly from Fantastical's local SQLite database and creates events via Fantastical's x-fantastical3:// URL scheme. No TCC permissions, no API keys, no network access -- it works entirely offline using the data Fantastical already stores on your Mac.
- Read -- Query events by date range, calendar, or full-text search
- Write -- Create events using Fantastical's natural language parser
- Navigate -- Open Fantastical to a specific date
Requirements
- macOS
- Fantastical installed with at least one calendar
- Python 3.12+
Quick start
Claude Desktop (1-click install)
- Download
fantastical-mcp-0.1.0.mcpbfrom the latest release - Double-click the file
- Done — Fantastical tools are now available in Claude Desktop
Install from PyPI
uvx fantastical-mcp
Local development
git clone https://github.com/jaydenk/fantastical-mcp.git
cd fantastical-mcp
uv venv && uv pip install -e ".[test]"
Configuration
Claude Code
Add to your .claude/settings.json (or project-level settings):
Published package:
{
"mcpServers": {
"fantastical": {
"command": "uvx",
"args": ["fantastical-mcp"]
}
}
}
Local development:
{
"mcpServers": {
"fantastical": {
"command": "uv",
"args": ["run", "--directory", "/path/to/fantastical-mcp", "fantastical-mcp"]
}
}
}
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"fantastical": {
"command": "uvx",
"args": ["fantastical-mcp"]
}
}
}
See docs/configuration.md for environment variables, calendar exclusion, and transport options.
Available tools
| Tool | Description |
|---|---|
get_today |
All events for today, grouped by calendar |
get_upcoming |
Events for the next N days, grouped by date |
get_calendars |
List all calendars with event counts |
get_event |
Full details for a specific event by ID |
search_events |
Full-text search across titles, locations, notes, attendees |
get_events_by_calendar |
Events from a specific calendar |
get_availability |
Free/busy time slots for a date |
get_recurring |
Upcoming recurring events, optionally filtered by calendar |
get_invitations |
Pending event invitations that need a response |
get_recent |
Most recently added or synced events |
create_event |
Create an event using natural language |
show_date |
Open Fantastical's mini calendar to a date |
See docs/tools.md for parameters, types, defaults, and example output.
Limitations
- No update or delete -- Fantastical's URL scheme only supports event creation. Modification and deletion require EventKit, which needs TCC permissions.
- macOS only -- Relies on Fantastical's macOS database location and the
opencommand. - Read-only database access -- The database is opened in
?mode=roto prevent any risk of corruption. - Blob format dependency -- The
NSKeyedArchiverserialisation format is an internal detail of Fantastical and could change between versions. An FTS fallback path mitigates this.
Documentation
- Tool reference -- Detailed parameters and example output for every tool
- Configuration guide -- Environment variables, transport options, calendar exclusion
- How it works -- Technical architecture and design decisions
- Development guide -- Project structure, testing, and contributing
Licence
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fantastical_mcp-0.1.0.tar.gz.
File metadata
- Download URL: fantastical_mcp-0.1.0.tar.gz
- Upload date:
- Size: 91.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5491919b8e3aa32d92b18f94170c4f1aa1ac63c70fc5cfd479409860eb780146
|
|
| MD5 |
8f53a2664d367fa361bb749137c0ebbd
|
|
| BLAKE2b-256 |
c208204b4724edc76d3c8a60fcaa5add9896f5b9c7f5e804dd60b7f76a765417
|
File details
Details for the file fantastical_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fantastical_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5ac5e94c279831632e989e0b461a736be876923108772ac7c9e18a58f8599e7
|
|
| MD5 |
c102f4f545ca6322eb683dcf3b200a61
|
|
| BLAKE2b-256 |
e3f51e8444a784f13b4ba7c3c2f6a4489049c9525faf0ae106faae054827dd87
|