Private self-hosted MCP server for email management with IMAP/SMTP support, persistent project memory, semantic search, task scheduling, and AMP-for-Email capabilities
14 tools with complete schemas and descriptions, but quality is uneven. Most tools are read-only with minimal parameter complexity. Naming follows verb_noun convention well (list_, get_, search_, set_, validate_). Descriptions are present but often terse (avg ~80 chars, below the 194-char baseline). Parameters lack depth: many accept optional account_id with minimal guidance on resolution behavior. Error handling is generic ('ok': False, 'error': str(exc)) without recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Output schemas are not formally documented, responses inferred from code. set_amp_account_state is the only write tool; it lacks confirmation/dry-run pattern. search_emails and list_mailboxes lack pagination (limit defaults to 20 but no cursor/offset or total_count). Attachment tools (get_email_attachment, read_email_attachment) have overlapping responsibility, could be clearer.
Read-only. Return AMP-for-Email capability and Google registration checklist for one sender. AMP capability is per account and is only usable when amp_enabled=true.
Read-only. Return the running build, release version and high-level v9.2.1 capabilities.
Read-only. Fetch one complete email from the selected account by mailbox and IMAP UID.
Read-only. Download one attachment from the selected account.
Read-only. List configured email accounts without credentials.
Read-only. List attachments for one email in the selected account.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe read-only tools from destructive ones without explicit hints. set_amp_account_state modifies state but lacks destructiveHint.
Error responses are generic: {'ok': False, 'error': str(exc)}. No recovery guidance, error classification, or actionable next steps. LLMs cannot self-correct or decide whether to retry.
Pagination missing from list tools. search_emails and list_mailboxes default limit=20 but provide no cursor, offset, or total_count. Large result sets will be truncated silently.
Descriptions are terse (avg ~80 chars vs 194-char baseline). Many lack WHEN to use, prerequisites, or dependency hints. E.g., 'list_known_contacts' does not explain it returns historical Sent recipients or how to use results.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Read-only. List historical Sent recipients/domains for the selected account.
Read-only. List available IMAP mailboxes for the selected account.
Read-only. Verify IMAP connectivity for one account. Omit account_id to use the default account.
Read-only. Extract text from one attachment in the selected account.
Read-only. Search one selected email account using structured filters.
WRITE ACTION. Update opt-in AMP capability/registration state for one sender account.
Read-only network test. Authenticate to the selected account's IMAP and SMTP servers without sending.
Read-only. Run local structural AMP-for-Email preflight checks. This does not replace Google's delivered-message/AMP validation.
set_amp_account_state (write tool) lacks confirmation/dry-run pattern. No way to preview changes before committing. Agents risk unintended state mutations.