Keywords: lm studio plugin, email ai, imap ai, local email assistant, gmail ai local, outlook ai, private email ai, read email with ai, no cloud, send email ai
Search, read, and send email across multiple accounts ā using your actual IMAP inbox.
Supports up to 3 accounts simultaneously. Works with Gmail, Outlook, Yahoo, iCloud, Fastmail, and any IMAP provider.
email_accounts ā list configured accounts with slot numbers and labelsemail_list ā recent emails from any folderemail_search ā search by keywords, sender, subject, date range, or unread statusemail_read ā full email body, headers, and attachment listemail_list_folders ā all mailbox folders for an accountemail_send ā send or reply via SMTPAll processing happens locally. Your emails are never sent to any external service.
Load the plugin folder in LM Studio, then configure accounts in plugin settings.
Up to 3 accounts. Each account has its own set of credentials.
| Field | Description |
|---|---|
| Account N ā Label | Friendly name shown in responses (e.g. Work, Personal, Gmail) |
| Account N ā IMAP Host | e.g. imap.gmail.com, outlook.office365.com |
| Account N ā IMAP Port | 993 = SSL (recommended), 143 = STARTTLS |
| Account N ā Email Address | Your full email address |
| Account N ā Password / App Password | Password or app-specific password |
| Account N ā SMTP Host | e.g. smtp.gmail.com. Leave blank to disable sending for this account |
| Account N ā SMTP Port | 587 = STARTTLS (recommended), 465 = SSL |
| Default Folder | Mailbox folder used when folder param is blank (default: INBOX) |
| Max Results | Emails returned per search/list call (default: 20) |
Only Account 1 is required. Accounts 2 and 3 are optional ā leave their labels blank to disable.
imap.gmail.com Port: 993smtp.gmail.com Port: 587outlook.office365.com Port: 993smtp-mail.outlook.com Port: 587Every tool accepts an account parameter:
"1", "2", "3" ā by slot number"Work", "Personal", "Gmail" ā by label (case-insensitive)"What accounts do I have set up?"
ā email_accounts()
"Show my recent inbox"
ā email_list()
"Show unread emails on my work account"
ā email_list(account="Work", unseen=true)
"Find the contract Sarah sent last month"
ā email_search(from="sarah@company.com", subject="contract", since="2024-11-01")
"Search both accounts for that invoice"
ā email_search(query="invoice", account="1") then email_search(query="invoice", account="2")
"Reply to that email"
ā email_read(uid=...) ā get messageId ā email_send(reply_to_message_id=..., body=...)
email_send always requires explicit user confirmation before the LLM calls it ā sending is irreversible. The system prompt instructs the model never to send without confirmation.
cd email-plugin
npm install
npm run build
email_list(account="Work")
email_search(query="invoice", account="2")
email_send(account="Personal", to="...", subject="...", body="...")