A comprehensive Model Context Protocol (MCP) server for CalDAV calendar management, built with FastMCP 2.0. Chronos provides advanced calendar and event management capabilities with multi-account support.
- Multi-account Support: Manage multiple CalDAV servers simultaneously
- Full CRUD Operations: Create, read, update, and delete calendars and events β
- Advanced Event Management:
- Recurring events with RRULE support β
- Event updates with partial field modifications β
- Attendee management and invitations (JSON format) β
- Reminders and alarms (VALARM) β
- Timezone-aware operations
- Advanced Search:
- Full-text search across events β
- Field-specific search (title, description, location) β
- Multiple match types (contains, starts_with, exact, regex) β
- Date range filtering β
- Relevance ranking algorithm β
- Bulk Operations:
- Create multiple events in parallel β
- Delete multiple events efficiently β
- Atomic operations with rollback β
- Configurable error handling modes β
- Security Hardening:
- Comprehensive input validation β
- XSS and injection prevention β
- Path traversal protection β
- RFC-compliant validation β
- Task Management: Full VTODO support β
- Journal Entries: Full VJOURNAL support β
Chronos MCP provides comprehensive support for CalDAV tasks:
- Create tasks with due dates, priorities, and descriptions
- Track progress with percentage completion (0-100%)
- Manage status: NEEDS-ACTION, IN-PROCESS, COMPLETED, CANCELLED
- Create subtasks using related_to relationships
- Bulk operations for efficient task management
Available tools:
create_taskβ Create a task with summary, due date, priority, descriptionlist_tasksβ List tasks in a calendar, optionally filtering by statusupdate_taskβ Partial update of task fields (status, priority, progress, etc.)delete_taskβ Delete a task by UIDbulk_create_tasksβ Create multiple tasks in parallelbulk_delete_tasksβ Delete multiple tasks in parallel
# Example: Create a task
mcp call create_task '{
"calendar_uid": "my-calendar",
"summary": "Complete project documentation",
"due": "2025-02-01T15:00:00Z",
"priority": 2
}'Keep detailed records with CalDAV journal entries:
- Create journal entries with timestamps and rich descriptions
- Link related entries using related_to relationships
- Organize with categories for better searchability
- Update and manage existing journal entries
Available tools:
create_journalβ Create a journal entry with summary and descriptionlist_journalsβ List journal entries in a calendarupdate_journalβ Partial update of journal fieldsdelete_journalβ Delete a journal entry by UIDbulk_create_journalsβ Create multiple journal entries in parallelbulk_delete_journalsβ Delete multiple journal entries in parallel
# Example: Create a journal entry
mcp call create_journal '{
"calendar_uid": "my-calendar",
"summary": "Team Meeting Notes",
"description": "Discussed Q1 objectives..."
}'For detailed usage, see VTODO/VJOURNAL Guide.
Chronos MCP now supports secure password storage using your system's keyring (via python-keyring). When available, passwords are automatically stored in:
- macOS: Keychain Access
- Windows: Windows Credential Locker
- Linux: Secret Service (GNOME Keyring, KWallet, etc.)
If you have existing accounts with passwords stored in plain text, migrate them to secure storage:
# Check what will be migrated (dry run)
python scripts/migrate_to_keyring.py --dry-run
# Perform actual migration
python scripts/migrate_to_keyring.pyThe migration script will:
- Read existing passwords from
~/.chronos/accounts.json - Store them securely in your system keyring
- Create a backup of the original configuration
- Remove passwords from the JSON file
If keyring is not available (e.g., SSH sessions, containers), Chronos MCP will:
- Warn about the security implications
- Fall back to storing passwords in the configuration file
- Automatically attempt to migrate passwords to keyring when it becomes available
Note: If keyring is not installed or available, passwords will be stored in plain text at ~/.chronos/accounts.json. Install keyring support with:
pip install "chronos-mcp[secure]" # or just: pip install keyringpip install -e .Includes keyring support for secure password storage:
pip install -e ".[secure]"Or if you already have Chronos installed:
pip install keyring>=24.0.0CALDAV_BASE_URL=http://<YOUR_CALDAV_SERVER>:5232
CALDAV_USERNAME=<YOUR_USERNAME>
CALDAV_PASSWORD=<YOUR_PASSWORD>Create ~/.chronos/accounts.json:
{
"accounts": {
"personal": {
"url": "http://<YOUR_CALDAV_SERVER>:5232",
"username": "<YOUR_USERNAME>",
"display_name": "Personal Calendar"
},
"work": {
"url": "https://caldav.company.com",
"username": "user",
"display_name": "Work Calendar"
}
},
"default_account": "personal"
}Note: Passwords are not included in the JSON when using keyring. They will be:
- Prompted for on first use and stored securely
- Migrated from existing configuration using
scripts/migrate_to_keyring.py - Only stored in JSON if keyring is unavailable (with a warning)
./run_chronos.shList all configured accounts:
list_accounts()
Create an event with reminder:
chronos:create_event(
calendar_uid="assistant",
summary="Team Meeting",
start="2025-07-08T14:00:00",
end="2025-07-08T15:00:00",
location="Conference Room",
alarm_minutes="15" # Note: Pass as string!
)Create recurring event with attendees:
chronos:create_event(
calendar_uid="work",
summary="Weekly Standup",
start="2025-07-07T09:00:00",
end="2025-07-07T09:30:00",
recurrence_rule="FREQ=WEEKLY;BYDAY=MO,WE,FR",
attendees_json='[{"email": "team@example.com", "name": "Team"}]'
)Delete an event:
chronos:delete_event(
calendar_uid="assistant",
event_uid="abc-123-def-456"
)Update an event (partial update):
chronos:update_event(
calendar_uid="assistant",
event_uid="abc-123-def-456",
location="Room 202", # Update location
alarm_minutes="30" # Change reminder to 30 minutes
# Other fields remain unchanged
)- Usage - Basic tool usage examples
- Architecture Guide - System design and components
- RRULE Guide - Recurring events documentation
- VTODO/VJOURNAL Guide - Task and journal management
- Architecture Decisions - ADR records
- Contributing - Development guidelines
- Security Policy - Security reporting and practices
See GitHub Issues for current limitations and workarounds.
See CHANGELOG.md for version history.
See CONTRIBUTING.md for development guidelines.