Mailspring MCP server plugin — exposes email data via Model Context Protocol
Mailspring MCP has 11 well-named, read-only tools with consistent verb_noun naming (search_emails, read_email, list_threads, etc.). All tools have descriptions (avg ~120 chars, within baseline 34-392 range). Input schemas are present and use Zod with type definitions and descriptions. However, output schemas are NOT documented, responses are inferred from code (formatMessage helper, json wrapper) but never formally declared in tool definitions. Parameter descriptions are adequate but lack constraint details (e.g., 'limit' accepts 1-500 but description doesn't state bounds). Error handling is minimal, no recovery guidance, no categorization of retryable vs fatal errors. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only. Batch tool (batch_read_emails) is a good composition pattern but lacks per-item error reporting.
Read multiple emails at once by their IDs, including full body content and attachments. Use this to efficiently analyze or categorize a batch of emails instead of calling read_email repeatedly.
Get mailbox statistics including total messages, threads, contacts, folders, labels, and unread thread count.
Get recent emails with optional date range filtering and pagination.
List or search contacts from the address book.
List draft emails with pagination.
List all email folders/mailboxes.
List all email labels (Gmail labels, etc.).
Output schemas not documented. Tool definitions lack return type specifications. LLMs cannot plan downstream calls or extract required fields without seeing what each tool returns.
Parameter constraints not stated in descriptions. 'limit' accepts 1-500 but description omits bounds. LLMs may pass invalid values (0, 1000+) requiring validation errors and retries.
No tool annotations. All 11 tools are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations. Agents cannot distinguish safe tools from destructive ones without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
List email threads with filters for folder, label, unread/starred status, date range, and attachments. Returns enriched thread metadata including message count and last sender.
Read a specific email by its ID, including the full body content and attachment list.
Read a full email thread with all messages, body content, attachments, and reply status.
Search emails with full-text search and optional structured filters. The query field supports FTS5 syntax: use OR for alternatives (interview OR callback), quoted phrases for exact match ("phone screen"), prefix matching (sched*), and NOT to exclude terms. Combine with structured filters for precise results.
Error handling lacks recovery guidance. Code returns generic 'not found' errors without suggesting next steps (e.g., 'Try search_emails() with a partial query'). Agents cannot self-correct.
batch_read_emails lacks per-item error reporting. If 3 of 50 emails fail, the response returns all failures without indicating which succeeded. Agent cannot proceed with partial results.