MCP server for Open-Xchange and standards-based mail platforms: email (IMAP/SMTP), mail filters (Sieve), calendar (CalDAV), contacts (CardDAV), and free/busy scheduling.
ox-mcp demonstrates strong tool design with consistent naming conventions (verb_noun pattern), comprehensive parameter descriptions, and well-structured Zod schemas. All 24 tools follow the action-verb convention (calendar_*, contact_*, email_*, list_servers). Input schemas are explicitly defined for all tools with proper type declarations. However, some parameter descriptions lack specificity about constraints, formats, and error recovery guidance. Output schemas are not formally documented in the tool definitions, only the tools themselves are visible, not their response formats. Error handling delegates to the SDK but lacks explicit recovery guidance in tool descriptions. Tool descriptions average ~80-120 characters (within baseline 34-392 range) and are generally adequate but could be more prescriptive about when to use each tool vs. alternatives.
Accept a calendar event invitation as this account (sets your PARTSTAT to ACCEPTED; the server notifies the organizer).
Create a calendar event (VEVENT) in a calendar.
Decline a calendar event invitation as this account (sets your PARTSTAT to DECLINED; the server notifies the organizer).
Delete a calendar event by its object URL.
Query attendees' availability (busy/free windows only) via the CalDAV scheduling outbox. No calendar sharing required.
List CalDAV calendars (own and any shared with the account).
Output schemas not formally documented in tool definitions. Only input schemas visible; return types and field structures not explicitly specified in the tool definitions themselves.
Destructive tools (calendar_delete_event, email_delete) lack explicit confirmation/dry-run pattern. Descriptions do not mention recovery options or undo paths.
Parameter descriptions lack specificity about format constraints. E.g., ISO 8601 dates mentioned but no pattern examples (2024-01-15T10:30:00Z vs 2024-01-15). email_search 'body' parameter notes limitation for ox-api but lacks guidance on when to use imap transport.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
List events in a calendar within a time range.
Tentatively accept a calendar event invitation as this account (sets your PARTSTAT to TENTATIVE; the server notifies the organizer).
Replace an existing calendar event by its object URL.
Create a CardDAV contact (vCard) in an address book.
Search CardDAV contacts by a case-insensitive substring (server-side where supported). Useful for resolving a name to an email address, e.g. before calendar_free_busy.
List all CardDAV contacts. Reads all address books unless one is given. To search, use contact_find instead.
Delete an email by UID (moves to Trash or expunges per server policy).
Flag or unflag (star/unstar) an email.
List the most recent emails in a folder (newest first).
List IMAP mailboxes/folders for an account.
Move an email by UID to another folder.
Read a single email (headers + body) by UID.
Reply to the sender of an email, threading preserved.
Reply to all recipients of an email (sender + To/Cc, excluding yourself), threading preserved.
Compose a message and save it to the Drafts folder (does not send).
Search emails by from/to/subject/body/text, date range, and flags. Searches ALL folders unless a folder is given. Note: on the ox-api transport, `body`/`text` match only the subject and addresses of recent messages (not full message bodies); use the imap transport for true full-text search.
Send an email via SMTP.
List configured accounts/servers and their mail/calDav/cardDav sections (hosts, users, auth types). Never returns secrets.
Tool descriptions do not provide dependency hints or guidance on tool selection order. E.g., calendar_create_event does not hint 'Call calendar_list first to get calendar URL', and email_search does not explain when to use email_list_folders vs email_list.
Error handling and recovery paths not documented in tool descriptions. No guidance on what to do when a tool fails (e.g., 'If attendee not found, use contact_find to resolve email first').
Pagination guidance missing from list/search tools. email_list and contact_find accept 'limit' but no documentation of total count, next_cursor, or how to fetch next page.