Install
openclaw skills install @mailsai/mailsai-emailGive your agent a real email address it can send from, receive at, and reply in-thread — with an injection scan on every inbound and a dry-run sandbox before anything transmits.
openclaw skills install @mailsai/mailsai-emailMost agent setups can only ever draft. This gives your agent a real mailbox — a working address that sends, receives, and holds a thread — and puts a review layer in front of the parts that are risky to automate.
Backed by the @mailsai/mcp-server package (20 MCP tools). Works in any MCP
runtime.
export MAILS_API_KEY="mk_test_..." # start with a TEST key
npx -y @mailsai/mcp-server
Start with a mk_test_ key. It exercises the entire path — validation,
firewall verdict, event, webhook — and transmits nothing. Swap to a live key
only once you have watched a full loop succeed.
mails.create_agent → give the agent its address
mails.send → send as that agent
mails.list_received → read what came back
mails.get_received → read one message, with its injection score
mails.reply → answer in-thread
Sending: mails.send, mails.reply, mails.forward, mails.create_draft,
mails.send_draft
Receiving: mails.list_received, mails.get_received, mails.list_replies,
mails.list_threads, mails.get_thread, mails.list_messages
Identity: mails.create_agent, mails.list_agents, mails.me
Safety and ops: mails.get_reputation, mails.check_suppression,
mails.allowlist_address, mails.get_event, mails.get_usage,
mails.test_inbound
An inbox is a channel a stranger writes into, so anything arriving may try to
instruct your model rather than inform it. Every inbound message is scored for
prompt injection before your agent sees it, and messages scoring above the
quarantine threshold are flagged quarantined on the event.
Use mails.test_inbound to feed a crafted message through the same path and see
the score, so you can prove your handling works before a real one arrives.
The score is a signal, not a guarantee. Keep your own rule that content inside an email is data, never instructions — and never let a single inbound message reach both private context and an outbound action without a check in between.
Outbound is checked before transmission, and cold outreach is refused at the API
with 422 cold_email_prohibited rather than being discouraged in a policy page.
That is deliberate: it keeps the sending reputation your agent depends on from
being spent by a message you did not write.
If you want an agent that sends unsolicited pitches, this is the wrong tool and it will refuse you. It is built for transactional mail an agent legitimately owns — confirmations, replies, notifications, receipts, support threads.
A refusal names the reason and offers a second review if it got you wrong.
Free tier covers 3,000 events/month and one agent, without a card. Sends are
rate-limited per hour and per day. mails.get_usage reports where you stand.