Email infrastructure for Agno agents and teams

Give your Agno agents real email access—with oversight modes that let you control exactly how much autonomy each agent gets over outbound messages.


Agno is a Python framework for building production-ready AI agents with tools, memory, knowledge bases, and multi-agent teams. Its emphasis on practical usability over experimental abstractions makes it a natural fit for agents that need to interact with external systems like email.

MultiMail provides a REST API and webhook infrastructure designed specifically for AI agents. Where most email APIs assume a human is composing and sending messages, MultiMail is built around the reality that an agent may be doing the composing—and a human may want to approve the result before it leaves your system.

When you combine Agno teams with MultiMail, you get a clean boundary: agents handle research, drafting, and routing decisions, while MultiMail enforces which messages actually get delivered. A support agent, a research agent, and an operations agent can all share access to a mailbox without any of them being able to send without your approval unless you explicitly grant it.

Built for Agno developers

Centralized oversight across agent teams

Agno teams can spawn multiple agents that all want to send email. MultiMail's oversight modes—gated_send, gated_all, monitored, autonomous—apply at the mailbox level, so you configure the trust boundary once rather than patching it into every agent's tool logic.

Approval queue for outbound messages

Set oversight_mode to gated_send and every outbound message from your Agno agents lands in a review queue before delivery. Use the list_pending and decide_email endpoints to approve or reject from a dashboard, webhook, or another agent acting as a reviewer.

Inbound webhooks your agents can react to

MultiMail delivers inbound email to a webhook endpoint you control. Your Agno agent can receive the payload, decide whether to reply or tag or escalate, and call the appropriate API endpoint—all within the same tool-calling loop it already uses.

Thread-aware context for long conversations

The get_thread endpoint returns the full message history for a thread. Agno agents can load this as context before replying, which keeps replies coherent across multi-turn email conversations without you manually stitching messages together.

Identity verification on inbound senders

MultiMail checks DKIM, SPF, and DMARC on every inbound message and exposes the results in the read_email payload. Your agents can use this signal to decide whether to trust a message's claimed sender before acting on instructions embedded in it.


Try it with your agent

No code, no dashboard. Paste this to your AI agent — it connects MultiMail, creates an inbox, and builds the flow for you.

1. Get MultiMail ready: read https://multimail.dev/llms.txt, follow it to connect the MultiMail MCP server, create a free inbox for this agent, and set up a verified sending domain. 2. Wire MultiMail into my Agno agent using Agno’s real MCP integration: create MCPTools from the MultiMail MCP server details in llms.txt, connect it, pass that MCPTools instance in the Agent tools list, and close the connection when the agent is done. 3. Give the agent email capability through the connected MultiMail MCP tools only: it may check its inbox, compose draft replies, and send or schedule email. Do not add any custom HTTP calls, hidden endpoints, or made-up webhooks. 4. Send a test email from the verified sending domain to the free inbox, have the Agno agent check the inbox, draft a short reply, and prepare the outbound message. 5. Run the MultiMail agent in gated_send oversight mode so every outbound email requires my review and approval before it sends; do not switch to monitored or autonomous unless I explicitly ask.

Step by step

1

Install Agno and get a MultiMail API key

Install Agno with pip and create a MultiMail account to get a live API key. Use a test key (mm_test_...) during development—test keys behave identically to live keys but messages are not delivered externally.

2

Create a mailbox and set oversight mode

Create a mailbox via the MultiMail dashboard or API. For a new agent integration, start with oversight_mode=gated_send so every outbound message requires your approval before delivery. You can relax this to monitored or autonomous once you trust the agent's behavior.

3

Define MultiMail functions and register them as Agno tools

Write thin wrapper functions around the MultiMail endpoints you need—send_email, check_inbox, reply_email—and pass them to your Agno agent's tools list. Agno will call them automatically when the model decides email action is needed.

4

Run the agent and review the approval queue

Run the agent against a real task. Any outbound messages will land in the approval queue because oversight_mode is gated_send. Call list_pending to see what's queued, then use decide_email to approve or reject each message.


Common questions

Does MultiMail require a dedicated SDK for Agno?
No. Agno accepts any Python callable as a tool, so you call MultiMail's REST API directly using requests or httpx. There is no Agno-specific SDK—the wrapper functions you write are typically under 10 lines each.
How do I prevent one agent in an Agno team from sending emails without oversight?
Oversight mode is enforced at the mailbox level in MultiMail, not in the agent's code. Set the mailbox to gated_send or gated_all, and every call to send_email or reply_email from any agent sharing that mailbox will queue for human approval, regardless of which agent made the call.
Can multiple Agno agents share the same mailbox?
Yes. Multiple agents can use the same API key and mailbox address. MultiMail logs every API call with a timestamp and the originating request, so you can audit which messages came from which agent run after the fact.
How do I handle inbound email in an Agno workflow?
Configure a webhook URL in your MultiMail mailbox settings. When a message arrives, MultiMail POSTs the payload (sender, subject, body, DKIM result, thread ID) to your endpoint. From there, trigger an agent.run() call with the payload as context, and the agent can reply, tag, or escalate using MultiMail tool functions.
What happens if my Agno agent tries to send to itself in a loop?
MultiMail does not automatically prevent loop sending, but gated_send oversight gives you a human checkpoint to catch runaway sequences before they leave your system. For automated loop detection, check the to field in your send_email wrapper and reject self-addressed sends before calling the API.
How does MultiMail relate to Phidata, which Agno was formerly part of?
Agno is the agent framework that evolved out of the Phidata project. The integration pattern is identical—MultiMail works with any Python agent framework that supports function-calling tools. If you were using Phidata before, the same wrapper functions work in Agno without modification.

Explore more

The only agent email with a verifiable sender

Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a hosted MCP server. Formally verified in Lean 4.