loading…
Search for a command to run...
loading…
Local-first MCP server for agents that need to work across multiple Gmail and Microsoft 365 accounts without cloud token storage.
Local-first MCP server for agents that need to work across multiple Gmail and Microsoft 365 accounts without cloud token storage.
Local-first MCP server for agents that need to work across multiple Gmail and Microsoft 365 accounts without cloud token storage.
This is an alpha built for the exact pain in the thread: work Gmail, personal Gmail, side-project Gmail, and Microsoft 365 should all be available to an agent by alias.
Beta site: https://multi-mail-mcp.netlify.app
work, personal, side, m365, etc.confirm: "SEND".list_accountssearch_mailget_threadcreate_draftsend_draftsend_mailnpm install -g https://github.com/claygeo/multi-mail-mcp/archive/refs/heads/main.tar.gz
mailmcp init
In Google Cloud Console:
Desktop app.Then run:
mailmcp add-gmail `
--alias personal `
--credentials-json "C:\Users\you\Downloads\client_secret_....apps.googleusercontent.com.json"
The local callback is http://127.0.0.1:41577.
Default Gmail scopes:
https://www.googleapis.com/auth/gmail.readonlyhttps://www.googleapis.com/auth/gmail.composeThat means read/search plus draft/send support. There is no delete/archive/label mutation tool in this alpha.
In Microsoft Entra:
Mobile and desktop applications platform redirect URI: http://127.0.0.1:41578/oauth/callback.Then run:
mailmcp add-m365 `
--alias work `
--client-id "<MICROSOFT_CLIENT_ID>" `
--tenant common
Default Microsoft scopes:
offline_accessUser.ReadMail.ReadMail.ReadWriteMail.SendSome work/school tenants require admin consent before delegated mail scopes work.
After at least one account is added:
mailmcp list
mailmcp verify --account personal --max-results 3
mailmcp verify --account personal --max-results 3 --draft-to [email protected]
verify checks the local vault, confirms the send guard refuses sends without confirm: "SEND", searches real mail, fetches the first returned thread/conversation, and optionally creates an unsent draft. It does not send email.
If you added both providers:
mailmcp verify --provider gmail --max-results 3
mailmcp verify --provider m365 --max-results 3
To prove the MCP layer itself is responding:
npx @modelcontextprotocol/inspector --cli mailmcp server --method tools/list
npx @modelcontextprotocol/inspector --cli mailmcp server --method tools/call --tool-name list_accounts
Use this server as a stdio MCP command:
{
"mcpServers": {
"multi-mail": {
"command": "node",
"args": ["C:\\Users\\clayg\\Documents\\Codex\\2026-05-27\\caleb-baskin-calebbaskin-6m-i-ll\\dist\\cli.js", "server"]
}
}
}
If installed globally later, this can become:
{
"mcpServers": {
"multi-mail": {
"command": "mailmcp",
"args": ["server"]
}
}
}
List my configured mail accounts.
Search all my mail accounts for "invoice from Stripe" and show the newest 10 hits.
Use my work account to draft a reply to this thread. Do not send it.
Send the draft from my personal account only if it matches the body we just approved.
The alpha is intentionally local-first:
profiles.vault.json.master.key, or derived from MAILMCP_MASTER_KEY if set.init and vault writes try to remove inherited ACLs from the config directory, vault, and key so only the current user, Administrators, and SYSTEM can read them.confirm: "SEND".For a production public release, replace the local key-file fallback with OS keychain storage and complete the relevant Google/Microsoft verification work.
npm run check
This runs the TypeScript build and local smoke tests. OAuth/API calls require real client credentials and user login.
Выполни в терминале:
claude mcp add multi-mail-mcp -- npx Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.