democratize-technology/chronos-mcp
If you are the rightful owner of chronos-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Chronos MCP is an advanced CalDAV management server built with FastMCP 2.0, offering comprehensive calendar and event management capabilities.
Chronos MCP - Advanced CalDAV Management Server
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.
🚀 Features
- 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: Support for VTODO items (coming soon)
- Import/Export: iCalendar format support (coming soon)
- Sync Capabilities: Calendar synchronization between accounts (coming soon)
🔐 Security
Secure Password Storage (New!)
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.)
Migration to Secure Storage
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.py
The 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
Fallback Behavior
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
Legacy Security Warning
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 keyring
Installation
Standard Installation
pip install -e .
Secure Installation (Recommended)
Includes keyring support for secure password storage:
pip install -e ".[secure]"
Or if you already have Chronos installed:
pip install keyring>=24.0.0
Configuration
Environment Variables (Default Account)
CALDAV_BASE_URL=http://<YOUR_CALDAV_SERVER>:5232
CALDAV_USERNAME=<YOUR_USERNAME>
CALDAV_PASSWORD=<YOUR_PASSWORD>
Multi-Account Configuration
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)
Usage
Running the Server
./run_chronos.sh
Basic Operations
List all configured accounts:
list_accounts()
Example Tool Usage
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
)
Documentation
- - Complete API documentation
- - System design and components
- - Recurring events documentation
- - Request/response patterns
- - Technical choices explained
Known Issues
See for current limitations and workarounds.
Changelog
See for version history.
Contributing
See for development guidelines.