IMAP MCP server with read-only defaults. Exposes mail as tools for local LLMs (e.g. Ollama).
Strong tool naming (all verb_noun pattern) and comprehensive parameter schemas with types and descriptions. All 10 tools have clear, actionable descriptions (avg 150 chars). Pagination support via cursor/limit/returnPage is well-designed. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is absent from visible code. No tool annotations (readOnlyHint, idempotentHint). Parameter descriptions could be more prescriptive about constraints (e.g., 'limit capped globally' is vague). Missing guidance on when to use mail_search vs mail_search_advanced vs mail_query_by_folder, three similar tools risk LLM confusion.
Get message counters for one folder (messages, unseen, recent, UID metadata).
Fetch one full message by folder and UID (envelope + body text).
Get related messages in the same thread context using Message-ID/References/In-Reply-To. Includes snippets by default.
List attachment metadata for one message by folder and UID (no binary download).
List all mail folders (mailboxes). Use this to see INBOX, Sent, etc.
List recent messages in a folder (envelope only by default). Supports sort/cursor/snippet options.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination format). Breaks downstream tool chaining and forces agents to guess at field names.
Three similar search tools (mail_search, mail_search_advanced, mail_query_by_folder) risk LLM confusion. Descriptions say 'prefer mail_search_advanced' but do not clearly explain when to use mail_query_by_folder or mail_search. Violates single-responsibility principle.
Parameter descriptions use vague language ('capped globally', 'opaque cursor') without stating actual limits. E.g., 'limit capped globally', what is the cap? 100? 1000? LLMs cannot validate inputs without explicit constraints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
List unread messages in a folder (envelope only by default). Supports sort/cursor/snippet options.
Convenience free-text query in one folder. Prefer mail_search_advanced for canonical searches.
Convenience folder search by basic fields. Prefer mail_search_advanced for richer filters and agent reliability.
Primary advanced search tool: keyword, sender/receiver, subject/body, date/date-range, sent-date-range, read state, message-id.
No error handling guidance visible in tool definitions. If a mailbox does not exist or IMAP connection fails, LLMs have no recovery path. Missing pattern:recovery-guide.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only and idempotent, but LLMs cannot infer this. Annotations enable safer agent planning and retry logic.