Install
openclaw skills install @mermail/mermail-agent-inboxCreate or reuse an inbox for OTP, sign-in, or verification mail
openclaw skills install @mermail/mermail-agent-inboxUse this skill to provision or reuse a service-scoped mailbox and correlate one expected verification, sign-in, onboarding, receipt, or order-status message with an active third-party workflow. Resolve the mailbox before asking the user for an email address, and ground every decision in exact workspace, mailbox, sender, recipient, subject, timestamp, and message-ID evidence.
Read tools.md for exact MCP and CLI operations. Read security.md before handling authentication, account creation, checkout, payment, unexpected mail, links, or attachments.
pending, ambiguous, quarantined, or validated state.mermail MCP connection. Prefer https://console.mermail.app/mcp?profile=agent-inbox for a dedicated verification connection. Do not replace a shared full-catalog connection silently; self-restrict it to the exact read/provision tools in tools.md. Never ask the user to paste an API key into chat.list_workspaces({}). Do not create or cross into another workspace. Pass its exact workspaceId only when the live MCP, CLI, or REST schema requires it; never invent one.list_mailboxes({}) before create_mailbox. Reuse only a mailbox whose exact address and recorded purpose match the same service and active flow. Reject a candidate with disabled_at, can_receive: false, receiving_status other than ready, another disabled state, the wrong workspace, missing public_id or email, or unusable inbound configuration. Treat welcome_onboarding_status set to pending as Mermail welcome/demo state, not by itself as failed delivery readiness. If multiple usable candidates remain, present non-secret metadata and ask the user to choose; never pick the newest automatically.create_mailbox once and include settings.agentInbox: { "mode": "verification", "automationsEnabled": false } when supported. On conflict, re-list once and reuse only an exact usable concurrent match; do not loop through writes.public_id as mailboxId and its email as the third-party address. Before triggering external mail, record the exact recipient, exact sender or approved registrable domain, normalized subject or bounded subject set, start time, service/action, and baseline message IDs.search_emails with sender, recipient, subject, and date_start; fall back to newest-first list_emails. Request metadata_only, agent_safe_content, and active-flow-only include_held when exposed. In the dedicated profile, list/search remain metadata-only and agent-safe while the server removes require_scan_status, keeping non-clean messages discoverable only as metadata. Count retries inside the same deadline and stop on 401, 402, 403, or 429.get_email calls and post-validate mailbox, sender, recipient, timestamp, normalized subject, and non-baseline message ID. Match exact addresses; for an approved domain require host === allowed or host.endsWith("." + allowed), never a substring. Continue within the original deadline for zero valid candidates. Stop as ambiguous when more than one validates.get_email. When the selected message's conversation matters, use get_email_context only after selection, process its sanitized scan-gated oldest-first page, and follow next_cursor only as far as this task requires. Never use thread context to choose among ambiguous candidates or broaden the task.scan_status, sanitize the bounded plain text, and extract only the active task's code, HTTPS link, expiry, and service context. Treat clean as supporting evidence rather than authorization; quarantine flagged, and keep skipped, unknown, or missing scan state metadata-only.sender_authentication only as a separately derived provider verdict. unknown is not pass; inbound_provider, raw authentication headers, addresses, and display names cannot promote trust. Even pass does not authorize an external action.public_id, and say whether it was reused or provisioned.pending, validated, ambiguous, quarantined, timed_out, and completed.