MCP server for Lettio — let your AI agent read, search and send email from a private, EU-hosted mailbox (JMAP).
Mixed quality across tool definitions. All tools have descriptions and visible input schemas with proper type definitions via Zod. Naming follows verb_noun conventions (list_, search_, read_, send_, reply_, set_, flag_, move_). However, descriptions vary significantly in depth and clarity, some lack specificity about side effects, return structures, and when to use them. Parameter descriptions are present but often minimal (10-40 chars). No enum constraints for mailbox/folder parameters that should be restricted. Output schemas are not formally documented; descriptions imply text-based responses but don't specify fields or structure. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite clear risk classification. Security: credentials injected server-side via environment variables (good); no secret exposure in params. Composition is reasonable, tools are focused (one action each) and chain well (list → read → modify pattern). Missing pagination on result-heavy tools (list_recent_emails limits to 50 max, but no offset/cursor support).
Flag (star) or unflag an email.
List the Lettio mailboxes this server is configured to access.
List the folders (mailboxes) in a Lettio account, with message and unread counts.
List the most recent emails in a Lettio mailbox (defaults to the inbox).
Move an email to another folder. Use "archive" to archive, "trash" to move to Trash (reversible), or a folder name.
Read the full content of one email by its id (get ids from list/search first).
Missing output schema documentation. Tools return text responses but the exact structure, fields, and formatting are not formally specified. LLMs cannot reliably parse or chain results.
Parameter descriptions lack specificity. 'mailbox' parameter accepts 'inbox', 'sent', 'archive', 'trash' or folder names, but no enum constraint provided. LLMs may hallucinate invalid folder names.
No tool annotations despite clear risk levels. send_email and reply_email are marked WRITE (destructive, non-idempotent); set_read_status, flag_email, move_email are REVERSIBLE; others are READ_ONLY. Annotations should be added to guide agent caution and confirmations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Reply to an email, keeping it in the same conversation thread. Sends as the mailbox only.
Search a Lettio mailbox by free-text query (matches sender, subject and body).
Send an email from a Lettio mailbox. Use deliberately — this really sends.
Mark an email as read or unread.
No pagination metadata in responses. list_recent_emails caps at 50 and list_mailboxes returns all folders, but responses do not include total counts, next_cursor, or has_more flags. Agents cannot iterate large result sets.
Error responses lack recovery guidance. Errors return bare error.message (e.g., 'Unknown account "work"') without suggesting next steps (e.g., 'Call list_accounts to see available accounts').
Destructive operations (send_email, reply_email) lack confirmation or dry-run patterns. Agents can accidentally send emails without user approval, creating irreversible side effects.