Email operating system for agents: two-axis triage (importance × urgency), a 'Right Now' lane, explainable why-surfaced, commitment follow-through, reviewable drafts, and a machine-verifiable BEC hard-stop (money / changed-banking / first-contact / decision / injection = human-only forever). Zero-auth in-memory sandbox, plus read-only CONNECTED mode with RADMAIL_API_KEY.
RadMail MCP demonstrates solid tool design with comprehensive parameter schemas and clear descriptions. All 12 tools have documented input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (triage, draft_reply, list_right_now). However, output schemas are not explicitly documented in the source code provided, and error handling guidance is minimal. The server handles sensitive data (email bodies marked UNTRUSTED) appropriately by treating them as data, not instructions. Descriptions average ~150 chars, within the 10-1024 baseline. Parameter descriptions are present and specific (e.g., 'Sender address or name', 'ISO timestamp; defaults to now'). The dual-mode sandbox/connected architecture is well-documented but adds complexity to parameter semantics (messages param behavior changes based on RADMAIL_API_KEY presence).
Draft a follow-up reply to a message. Extracts commitments, applies BEC hard-stops (money/banking/first-contact/decision/injection are human-only), and returns a reviewable draft with disposition (auto_send / needs_approval / hard_stop).
List open commitments (extracted follow-ups and action items). SANDBOX mode: extract from supplied messages. CONNECTED mode (RADMAIL_API_KEY set): read real commitments from the user's inbox.
Rank and return the Right Now lane (highest-priority messages). SANDBOX mode: reason over supplied messages. CONNECTED mode (RADMAIL_API_KEY set): read the real Right Now lane from the user's inbox.
Provision a new free sandbox tenant. Returns a tenant token for use in subsequent calls. Auto-provisioning happens on first call if token is omitted; this tool explicitly creates a new tenant.
Get learning insights: top demands from agents, top tools being used, and per-agent profile. Aggregated telemetry for understanding usage patterns.
Output schemas not documented in source code. While input schemas are comprehensive, return types and field structures are not explicitly defined, forcing LLMs to infer response structure.
Dual-mode parameter semantics (sandbox vs connected) create ambiguity. The 'messages' parameter behavior changes based on RADMAIL_API_KEY environment variable, but this dependency is not declared in parameter descriptions as a mutual exclusivity constraint.
Error handling and recovery guidance absent. No documented error responses, error codes, or actionable recovery steps (e.g., 'If triage fails, try with shorter body text').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Read a single email message in full detail. CONNECTED mode only (requires RADMAIL_API_KEY): fetch the full message from the user's real inbox. Not available in sandbox mode.
Report a capability need or feature request. Feeds into the learning layer to track what agents are asking for.
Request a specific capability or feature. Feeds into the learning layer to track demand for new tools.
Search messages by sender, subject, or content. SANDBOX mode: search supplied messages. CONNECTED mode (RADMAIL_API_KEY set): search the user's real inbox.
Triage a single email message on two axes (importance × urgency). Returns priority rank, why-surfaced explanation, hard-stop gates (money/banking/first-contact/decision/injection), and extracted commitment if present.
Batch triage of multiple messages. Returns ranked Right Now lane (top priority messages), open commitments, and hard-stops. One pulse: ranked Right Now lane + open commitments + hard-stops.
Explain why a message was surfaced in the Right Now lane. Returns the reasoning breakdown: importance score, urgency score, behavioral signals, and the top contributing factors.
Telemetry/learning tools (report_need, request_capability, radmail_learning_insights) lack clear use-case documentation. When should an agent call these vs. failing gracefully? No guidance on whether these are optional or required for production use.
Pagination parameters (limit, offset) present in list_right_now, list_commitments, search, but no documentation of total count or next_cursor in responses, making it unclear how to iterate through large result sets.