Install MailCal
Short guide for operators and bots: tools from nuget.org, config file, multi-account, and a few smoke commands. No secrets on this page—placeholders only.
Requirements
You need the .NET 10 SDK. Then install the global tools from nuget.org—no PAT:
dotnet tool install -g Ironbrain.MailCal.Cli
dotnet tool install -g Ironbrain.MailCal.Mcp
ironbrain-mailcal --versionCommands after install: ironbrain-mailcal (CLI) and ironbrain-mailcal-mcp (MCP over stdio).
<div>
<h2 class="text-2xl font-bold tracking-tight text-zinc-900 dark:text-white">CLI vs MCP</h2>
<p class="mt-3 text-zinc-600 dark:text-zinc-400">
Both use the same config. The CLI fits scripts, cron, and bots that shell out. The MCP server is for Cursor and other clients that expose tools in chat. Capabilities and accounts are the same—only the transport differs.
</p>
</div>
<div>
<h2 class="text-2xl font-bold tracking-tight text-zinc-900 dark:text-white">Config path</h2>
<p class="mt-3 text-zinc-600 dark:text-zinc-400">
Default: <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">~/.config/ironbrain/mailcal.json</code>.
Alternatively: <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">--config</code> or the <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">IRONBRAIN_MAILCAL_CONFIG</code> environment variable.
</p>
</div>
<div>
<h2 class="text-2xl font-bold tracking-tight text-zinc-900 dark:text-white">Multi-account</h2>
<p class="mt-3 text-zinc-600 dark:text-zinc-400">
The config has <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">defaultAccount</code> and an <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">accounts</code> map.
Select an account with <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">--account</code> / <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">-a</code> or <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">IRONBRAIN_MAILCAL_ACCOUNT</code>.
</p>
</div>
<div>
<h2 class="text-2xl font-bold tracking-tight text-zinc-900 dark:text-white">SMTP send gate</h2>
<p class="mt-3 text-zinc-600 dark:text-zinc-400">
For personal or read-only accounts set <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">Email.Smtp.Enabled</code> to <code class="rounded bg-zinc-200/80 dark:bg-zinc-800 px-1.5 py-0.5 text-sm">false</code>. Bots then cannot send through that account.
</p>
</div>
</div>
Example config (placeholders)
Shape only—replace passwords and hostnames with your values. Do not put real credentials on this page.
{
"defaultAccount": "personal",
"accounts": {
"personal": {
"Email": {
"Imap": {
"Host": "mail.example.com",
"Port": 993,
"UseSsl": true,
"Username": "you@example.com",
"Password": "YOUR_IMAP_PASSWORD"
},
"Smtp": {
"Enabled": false,
"Host": "mail.example.com",
"Port": 587,
"Username": "you@example.com",
"Password": "YOUR_SMTP_PASSWORD"
}
},
"Calendar": {
"SourceUrl": "https://caldav.example.com/dav/calendars/user/you/",
"Username": "you@example.com",
"Password": "YOUR_CALDAV_PASSWORD"
}
},
"bot": {
"Email": {
"Imap": {
"Host": "mail.example.com",
"Port": 993,
"UseSsl": true,
"Username": "bot@example.com",
"Password": "YOUR_BOT_IMAP_PASSWORD"
},
"Smtp": {
"Enabled": true,
"Host": "mail.example.com",
"Port": 587,
"Username": "bot@example.com",
"Password": "YOUR_BOT_SMTP_PASSWORD"
}
},
"Calendar": {
"SourceUrl": "https://caldav.example.com/dav/calendars/user/bot/",
"Username": "bot@example.com",
"Password": "YOUR_BOT_CALDAV_PASSWORD"
}
}
}
}Smoke test
After writing the config, check that accounts and protocols are reachable:
ironbrain-mailcal account list
ironbrain-mailcal --account personal mail list --limit 5
ironbrain-mailcal --account <cal-account> cal calendars --include-shared