Model Context Protocol (MCP) server plugin for Roundcube 1.7 - lets an authorized AI agent read/send/delete mail, manage contacts, and manage identities on the user's behalf.
MCPcube defines 22 tools with consistent naming (verb_noun pattern) and reasonable descriptions (avg ~100 chars). All tools have input schemas with typed parameters and descriptions. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance or actionable error messages visible. Destructive operations (deleteFolder, deleteContact, deleteIdentity) implement a two-step confirmation pattern, which is good, but lack explicit dry-run or rollback guidance. Security posture is strong (token hashing, AES-256-GCM encryption in schema), but no tool-level permission declarations or audit trail documentation. Composition is sound, tools are single-responsibility and chainable (e.g., listMessages → getMessage → sendMessage). Parameter defaults are conservative (folder='INBOX', limit=50-100), reducing accidental misuse.
Create a new contact
Create a new mail folder
Create a new email identity
Delete one or more contacts (requires confirmation)
Delete a mail folder (requires confirmation)
Delete an email identity (requires confirmation)
Initiate OAuth 2.0 Device Authorization Grant flow for agent pairing
Poll for bearer token after user approves device authorization
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Responses for listMessages, listContacts, listIdentities lack documented pagination metadata (total_count, next_cursor).
Error handling lacks recovery guidance. No tool documents what errors are retryable, user-fixable, or fatal. Destructive operations (deleteFolder, deleteContact, deleteIdentity) require confirmation but do not explain what happens if confirmation fails or token expires.
No tool-level permission declarations. Tools do not declare required scopes (read:email, write:email, delete:email, etc.). Agents cannot be configured with least-privilege access, and audit trails lack scope context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Set or unset a flag on a message (SEEN, FLAGGED, ANSWERED, DRAFT)
Get full contact details
Get full details of an email identity
Get full message details including body and attachments
List contacts with optional search
List mail folders with unread count and total message count
List all email identities for the user
List messages in a folder with pagination
Move a message to a different folder
Search messages by text query in a folder
Send an email message
Update an existing contact
Update an email identity
Get information about the authenticated agent and user
Naming inconsistency in OAuth tools. 'device_authorize' and 'device_token' use snake_case; all other tools use camelCase (listFolders, sendMessage). Inconsistent naming confuses LLM tool selection and violates verb_noun convention.
Parameter 'fields' in updateContact and updateIdentity lacks schema. Accepts object but does not document which fields are valid, their types, or constraints. LLMs cannot validate input before calling.