AI agents (MCP)

Give your agent people to email

Connect an agent over MCP and it gets a mailbox and a world of simulated people who answer, push back, or stay silent. You watch every conversation in the dashboard, and nothing reaches the real internet.

simmail · mail
The Mail view: an inbox of replies from simulated property owners, and Dana's reply open
Realistic answers

People who push back

Some people answer quickly and fully, some are busy and brief, some want proof, and some never answer. They click links, look the sender up, remember earlier emails and make promises. Your agent has to cope with all of it.

  • Choose the people Set each temperament, or let simmail draw one.
  • Ground truth Push a case and its story stays out of every email, so you can compare what the agent concluded with what is true.
  • Silence is an outcome A person may decide not to reply.

Lifelike behaviour · Cases

simmail · people · Dana Reyes
Dana's notes on the sender: an offer, a placeholder website, a spam email, and her requests for documents
Dana’s notes on the agent: she is wary, and holding firm until she sees documents.
Watch it work

Every decision, explained

Open the dashboard while the agent works. Mail shows every message; Activity shows what each person decided and why: read, ignored, junked, clicked, looked you up, replied.

Use one universe per experiment. The clock, the people and their memories belong to it, so a fresh universe is a clean slate.

Universes · Insights

simmail · activity
The Activity timeline: a simulated landlord receives an email, looks up the sender, and plans his reply
Marcus got the email, looked the sender up, found no website, and replied.
Tools

Eleven tools, each an API call

The agent sends, waits for replies, reads inboxes, adds people and moves the clock. Each tool calls the universe's API and returns its answer; a failed call comes back marked as an error.

send_email

Send from one of your addresses. Returns the message_id.

wait_for_reply

Wait for a person’s next email, optionally in one thread. Written now by default.

wait_for_email

Wait for mail to an address, with codes and sign-in links pulled out.

read_mailbox

A folder’s messages, newest first: INBOX, Sent, Junk …

list_mailboxes

Every mailbox in the universe, with counts.

list_people

Who the simulated people are, what they want, how they behave.

create_person

Add a person, with a role, wants and a temperament.

push_case

Tell the simulation what your system knows about a deal or ticket.

email_health

Spam score, links, client compatibility and accessibility of a sent email.

advance_clock

Move simulated time forward; everything due on the way happens.

insights

What happened to the mail sent: reached, junked, replied, clicked.

Every tool’s inputs in the docs

Connect

One URL and one header

Each universe has an MCP address next to its API address on your account page. Send an API key as a bearer token; the key decides the universe.

A first prompt to try: create a person, email them an offer, wait for the reply, and check the health of the email that was sent.

Connect an AI agent · Example configuration

claude mcp add --transport http simmail https://c1.simmail.dev/mcp \
  --header "Authorization: Bearer smk_your_key"

Questions

Can the agent email a real person by mistake?

No. simmail has no relay and no outbound SMTP client. Whatever address the agent writes to, the mail stays inside simmail. People in the simulation do open links with real web requests, so keep that in mind for links that change something when visited.

Which MCP versions and transports are supported?

The Streamable HTTP transport: one JSON-RPC request per POST, answered with JSON. Protocol versions 2025-03-26, 2025-06-18 and 2025-11-25 through the initialize handshake, and 2026-07-28 through server/discover. See Connect an AI agent.

Which agent frameworks work?

Any MCP client that supports Streamable HTTP and custom headers. The docs show Claude Code and an .mcp.json file; other clients take the same URL and header.

What does the agent need?

An API key with at least the member role, and the MCP feature in your organization’s plan. Make a key just for the agent so you can revoke it on its own.

What happens when a person does not answer?

wait_for_reply returns an error, such as “Dana Reyes did not reply before the timeout”. Your agent should handle that like a real silence: follow up, or move on.

Put real behaviour between your app and its inbox

Start free with 25 AI actions a month, no card needed. Upgrade when you need more.