Local single-user desktop email client with a safe Claude MCP connector. Exposes read/draft tools for email management without send, delete, credential, or settings access.
DeskMail AI provides 27 tools with explicit Zod schemas and descriptions. Naming follows verb_noun convention (list_, search_, create_, mark_, flag_, move_, etc.), which is strong. Descriptions are present for all tools (avg ~120 chars) and most parameters. However, several critical gaps reduce the score: (1) Many parameter descriptions are minimal or missing type/format guidance (e.g., 'Snooze option' lacks enum values; 'Rule conditions' and 'Rule actions' are arrays with no schema detail). (2) Output schemas are not documented, callers cannot predict response structure. (3) Error handling is minimal; handlers return {ok: false, error: '...'} but lack recovery guidance or categorization. (4) Some tools combine multiple concerns (e.g., create_rule takes conditions AND actions arrays without documenting their structure). (5) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Strengths: all tools have descriptions; naming is clear and action-oriented; input schemas use Zod with type safety; reversible operations are well-marked in metadata.
Archive a message (move to Archive folder). Reversible.
Check whether an account (optionally by email) has been added and is receiving mail, or whether a staged setup is still waiting for the user to enter their password. Use this to confirm setup finished. Read-only.
Create a calendar event. Reversible.
Create an email rule. Reversible.
Create a task from an email or standalone. Reversible.
Delete an email rule. Reversible.
Export a message or thread for NotebookLM. Read-only.
Output schemas not documented. Callers cannot predict response structure (e.g., what fields does read_email return? What is the structure of search_emails results?). This forces LLMs to guess and wastes tokens on discovery.
Complex parameter schemas lack detail. 'snooze_message' option param is a string with no enum values documented (e.g., 'tomorrow', 'next_week' are inferred from code, not specified). 'create_rule' takes conditions and actions arrays with no schema for their structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk levels are documented in metadata but not exposed to the MCP protocol, so clients cannot distinguish safe reads from reversible writes from irreversible deletes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Flag or unflag a message. Reversible.
Get today's email digest data. Read-only.
List the mail accounts configured in DeskMail (no credentials).
List all contacts with details. Read-only.
List folders, optionally for one account, with unread/total counts.
List all labels. Read-only.
List all email rules. Read-only.
List all tasks. Read-only.
Mark a message read or unread. Reversible.
Move a message to a folder. Reversible.
Read one email by id: sender, recipients, subject, date, plain text body, attachments.
Save a draft email. Reversible.
Search cached emails with optional filters. Read-only.
Set a message as a followup or clear followup status. Reversible.
Add or remove a label from a message. Reversible.
Snooze a message until a specified time. Reversible.
Fill in DeskMail's Add-account form for the user with everything except the password, so they only have to type the password, run the connection test and save. Never send or ask for a password here. After calling this, tell the user to open DeskMail, enter their password on the pre-filled form, run the test and save — then call check_account_setup to confirm. Use suggest_mail_settings first to get the host/port/security.
Given an email address, return the IMAP/SMTP host, port and security to use, plus any note the user needs (e.g. an app-specific password is required). Known providers come back confirmed; unknown/custom domains come back as a best guess to confirm. Read-only.
Suggest email rules based on message content. Read-only.
Move a message to Trash. Reversible.
Error handling lacks recovery guidance. Handlers return {ok: false, error: '...'} but do not categorize errors as retryable, user-fixable, or fatal. No suggestions for next steps (e.g., 'Try search_users() first').
Parameter descriptions are minimal for complex inputs. 'Rule conditions' and 'Rule actions' are described as 'Rule conditions' and 'Rule actions' with no guidance on structure, valid keys, or examples.