AI drafts follow-up emails that reference your actual conversations. Reps review and approve — every prospect gets timely, relevant outreach.
Sales reps manage dozens of active deals simultaneously, and follow-ups consistently fall through the cracks. When they do follow up, it's often a generic 'just checking in' email that doesn't reference the specific conversation points that mattered to the prospect. This lack of personalization and consistency costs revenue on deals that were winnable.
MultiMail's AI agent monitors your conversation threads and detects when a follow-up is needed based on time elapsed since last contact. It drafts personalized follow-ups that reference specific discussion points from the thread history. With gated_send oversight, your reps review and refine each message before it reaches the prospect.
Your AI agent monitors sales mailbox threads using get_thread and check_inbox. It tracks which prospects haven't responded within your follow-up window (e.g., 3 days after a demo).
The agent reads the full thread history to identify specific topics discussed, questions asked, objections raised, and commitments made. This context drives personalization.
Using the conversation context, the AI drafts a follow-up that references specific points — not generic filler. Each draft includes a clear next step or call to action.
The drafted follow-up enters the approval queue under gated_send. Your rep can edit the tone, add details, or approve as-is. Approved emails are sent immediately via reply_email.
import requests
from datetime import datetime, timedelta
API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}
"cm"># Check for conversations needing follow-up
inbox = requests.get(
f"{API}/mailboxes/sales-mailbox-id/inbox",
headers=HEADERS,
params={"status": "read", "limit": 50}
).json()
stale_threshold = datetime.utcnow() - timedelta(days=3)
for msg in inbox["emails"]:
thread = requests.get(
f"{API}/threads/{msg[&"cm">#039;thread_id']}", headers=HEADERS
).json()
last_message = thread["messages"][-1]
# Only follow up if we sent the last message and got no reply
if (last_message["direction"] == "outbound" and
parse_date(last_message["date"]) < stale_threshold):
draft_follow_up(thread)Identify prospects who haven't responded within the follow-up window.
import requests
API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}
def draft_follow_up(thread: dict):
"cm"># Extract key discussion points from thread
context = extract_conversation_context(thread["messages"])
"cm"># Generate personalized follow-up
follow_up = generate_follow_up(
prospect_name=thread["participants"][0]["name"],
topics_discussed=context["topics"],
questions_asked=context["open_questions"],
days_since_last=context["days_elapsed"]
)
"cm"># Send via MultiMail (queued for rep approval)
response = requests.post(
f"{API}/reply",
headers=HEADERS,
json={
"in_reply_to": thread["messages"][-1]["id"],
"text_body": follow_up,
"html_body": f"<p>{follow_up}</p>"
}
)
print(f"Follow-up draft queued: {response.json()[&"cm">#039;id']}")Generate a personalized follow-up email referencing specific conversation points.
"cm">// Using MultiMail MCP tools for sales follow-ups
"cm">// 1. Check sales inbox for stale threads
const inbox = await mcp.check_inbox({
mailbox_id: "sales-mailbox-id",
status: "read",
limit: 50
});
for (const msg of inbox.emails) {
"cm">// 2. Get full thread history
const thread = await mcp.get_thread({
thread_id: msg.thread_id
});
const lastMsg = thread.messages[thread.messages.length - 1];
const daysSince = daysBetween(lastMsg.date, new Date());
"cm">// 3. Draft follow-up if stale and we sent last
if (lastMsg.direction === "outbound" && daysSince >= 3) {
const context = extractContext(thread.messages);
"cm">// 4. Reply (goes to approval queue under gated_send)
await mcp.reply_email({
email_id: lastMsg.id,
text_body: generateFollowUp(context)
});
await mcp.tag_email({
email_id: lastMsg.id,
tags: ["follow-up-sent", `attempt-${context.followUpCount + 1}`]
});
}
}Use MCP tools to manage sales follow-up sequences in an AI agent.
No more prospects falling through the cracks. The AI monitors every active conversation and drafts follow-ups on schedule, regardless of rep workload.
Follow-ups reference specific topics from the actual conversation — the pricing question from Tuesday, the integration concern from the demo. This shows prospects you were paying attention.
Gated send oversight means reps approve every outgoing message. They can refine tone, add personal touches, or adjust the ask — the AI handles the first draft, not the final word.
Define your follow-up schedule once and the AI enforces it consistently across every deal. No more guessing when the last touchpoint was.
Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 38-tool MCP server. Formally verified in Lean 4.