Give your agent your inbox — clean, token-cheap Markdown from any IMAP account, plus an MCP server.
mailctx has 5 tools with complete input schemas and descriptions. Naming follows verb_noun convention (search_mail, get_thread, list_accounts, draft_reply, get_digest). Descriptions are present and moderately detailed (avg ~120 chars), meeting the 10-1024 char baseline. However, parameter descriptions are sparse or missing context. search_mail lacks guidance on date format handling and interaction between 'days', 'since', 'until'. draft_reply omits explanation of what 'never sends' means operationally. Output schemas are undocumented, LLMs cannot predict response structure. Error handling is minimal: search_mail catches exceptions but returns generic stderr output; draft_reply returns plain strings instead of structured error objects. No idempotency hints, no permission declarations, no rate-limit guidance. Token optimization is mentioned but not quantified. Overall: solid naming and basic schemas, but weak on parameter relationships, output documentation, and error recovery patterns.
Append a draft reply to the Drafts folder (never sends).
Generate a token-lean weekly digest from recent emails. Categorizes emails into personal, transactional, newsletter, automated, and spam.
Get the whole conversation thread for a given Message-ID, compressed to be token-lean (Expansion A).
List configured accounts (names only, no secrets).
Search your email inbox for specific messages. Returns clean Markdown hits, token-optimized.
Output schemas undocumented. LLMs cannot predict response structure (Markdown string vs structured object). search_mail, get_thread, get_digest return strings; draft_reply returns string; list_accounts returns list[str]. No field documentation for downstream tool chaining.
Parameter relationships undocumented. search_mail accepts 'days', 'since', 'until', interaction unclear. LLM may pass conflicting values (days=7 AND since=2024-01-01). No guidance on precedence or mutual exclusivity.
Error handling returns unstructured strings. draft_reply returns 'Error creating draft: {e}', LLM cannot classify as retryable, user-fixable, or fatal. No recovery guidance. search_mail silently catches exceptions and logs to stderr.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Parameter descriptions lack format/constraint details. 'since' and 'until' accept 'YYYY-MM-DD' but description does not specify this. 'limit' defaults to 10 but no min/max bounds stated. LLMs may pass invalid values.
draft_reply description omits state-change semantics. 'never sends' is mentioned but unclear whether draft is immediately visible, requires confirmation, or is queued. No idempotency hint, LLM may retry and create duplicates.