About Cal
Cal is an MCP server in the Productivity category: self-hosted daily toolkit — calendar, tasks, notes, links, files, kanban boards, time tracking, GitHub inbox. One Docker container.
The repository has 2 stars and 0 forks.
Install
claude mcp add cal -- npx -y @miguelarios/cal-mcpnpx -y @miguelarios/cal-mcpThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Tools (12)
create_folderCreate an IMAP folder
Parameters not published.
delete_emailMove to trash, or permanently delete (confirms first)
Parameters not published.
download_attachmentDownload attachment by email UID and part ID, as an embedded binary resource
Parameters not published.
get_emailFetch full email by UID — headers, body, attachment metadata
Parameters not published.
get_email_rawExport email as raw .eml, as an embedded `message/rfc822` resource
Parameters not published.
get_folder_statusGet total and unread message counts for a folder
Parameters not published.
list_foldersList all IMAP folders with special-use flags
Parameters not published.
mark_emailSet/unset flags (read, unread, flagged)
Parameters not published.
move_emailMove emails between folders
Parameters not published.
search_emailsSearch and filter emails by folder, sender, subject, date, flags
Parameters not published.
send_draftSend an existing draft from the Drafts folder (confirms first)
Parameters not published.
send_emailCompose and send via SMTP, reply with threading, or save as draft (confirms before sending)
Parameters not published.
Ask AI
Ask AI about Cal
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
5 checks have not been run yet.
README
PIM Agents
AI agent tooling for email (IMAP/SMTP), calendar (CalDAV), and contacts (CardDAV). Three independent MCP servers built on open protocols.
Packages
| Package | Description | Install |
|---|---|---|
| @miguelarios/email-mcp | Email via IMAP/SMTP | npx @miguelarios/email-mcp |
| @miguelarios/cal-mcp | Calendars via CalDAV | npx @miguelarios/cal-mcp |
| @miguelarios/card-mcp | Contacts via CardDAV | npx @miguelarios/card-mcp |
Tools
Email (12 tools)
| Tool | Description |
|---|---|
search_emails |
Search and filter emails by folder, sender, subject, date, flags |
get_email |
Fetch full email by UID — headers, body, attachment metadata |
send_email |
Compose and send via SMTP, reply with threading, or save as draft |
send_draft |
Send an existing draft from the Drafts folder |
move_email |
Move emails between folders |
mark_email |
Set/unset flags (read, unread, flagged) |
delete_email |
Move to trash or permanently delete |
list_folders |
List all IMAP folders with special-use flags |
create_folder |
Create an IMAP folder |
download_attachment |
Download attachment by email UID and part ID |
get_email_raw |
Export email as raw .eml |
get_folder_status |
Get total and unread message counts for a folder |
Calendar (11 tools)
| Tool | Description |
|---|---|
list_calendars |
Discover calendars across all configured providers |
list_events |
Query events by date range with recurrence expansion |
get_today_events |
Get all events for today |
search_events |
Keyword search across title, description, and location |
get_event |
Get full event details by UID |
create_event |
Create event with attendees, alarms, categories |
update_event |
Update event by UID, including single recurrence instances |
delete_event |
Delete event by UID or single recurrence instance |
create_events_batch |
Create multiple events at once |
import_ics |
Import events from .ics content |
find_free_slots |
Find available time slots across calendars |
Contacts (6 tools)
| Tool | Description |
|---|---|
list_contacts |
List and search contacts by name, email, phone, org |
get_contact |
Get full contact details by UID |
create_contact |
Create a new contact with typed fields |
update_contact |
Update an existing contact (merge-based) |
delete_contact |
Delete a contact by UID |
resolve_contact |
Given a name, return email address |
Configuration
Add the servers to your MCP client config (Claude Desktop, Claude Code, etc.). Credentials are passed via environment variables.
{
"mcpServers": {
"email": {
"command": "npx",
"args": ["-y", "@miguelarios/email-mcp"],
"env": {
"IMAP_HOST": "imap.example.com",
"IMAP_USER": "user@example.com",
"IMAP_PASS": "your-app-password",
"SMTP_HOST": "smtp.example.com",
"SMTP_USER": "user@example.com",
"SMTP_PASS": "your-app-password"
}
}
}
}
Optional email env vars: IMAP_PORT (default 993), IMAP_SECURE (default true), SMTP_PORT (default 465), SMTP_SECURE (default true), SMTP_FROM_NAME.
Calendar
{
"mcpServers": {
"calendar": {
"command": "npx",
"args": ["-y", "@miguelarios/cal-mcp"],
"env": {
"CALDAV_MAILBOX_URL": "https://dav.mailbox.org/caldav/",
"CALDAV_MAILBOX_USER": "user@mailbox.org",
"CALDAV_MAILBOX_PASS": "app-password"
}
}
}
}
Add multiple providers by using different IDs: CALDAV_NEXTCLOUD_URL, CALDAV_NEXTCLOUD_USER, CALDAV_NEXTCLOUD_PASS, etc.
Contacts
{
"mcpServers": {
"contacts": {
"command": "npx",
"args": ["-y", "@miguelarios/card-mcp"],
"env": {
"CARDDAV_URL": "https://dav.example.com/carddav/",
"CARDDAV_USER": "user@example.com",
"CARDDAV_PASS": "your-app-password"
}
}
}
}
All three together
{
"mcpServers": {
"email": {
"command": "npx",
"args": ["-y", "@miguelarios/email-mcp"],
"env": {
"IMAP_HOST": "imap.example.com",
"IMAP_USER": "user@example.com",
"IMAP_PASS": "your-app-password",
"SMTP_HOST": "smtp.example.com",
"SMTP_USER": "user@example.com",
"SMTP_PASS": "your-app-password"
}
},
"calendar": {
"command": "npx",
"args": ["-y", "@miguelarios/cal-mcp"],
"env": {
"CALDAV_MAILBOX_URL": "https://dav.mailbox.org/caldav/",
"CALDAV_MAILBOX_USER": "user@mailbox.org",
"CALDAV_MAILBOX_PASS": "app-password"
}
},
"contacts": {
"command": "npx",
"args": ["-y", "@miguelarios/card-mcp"],
"env": {
"CARDDAV_URL": "https://dav.example.com/carddav/",
"CARDDAV_USER": "user@example.com",
"CARDDAV_PASS": "your-app-password"
}
}
}
}
License
MIT
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.