NuMail speaks the Model Context Protocol. Point Claude Code, Cursor, OpenAI Codex, or any MCP-compatible client at @numail/mcp and it can create campaigns, import leads, connect mailboxes, read the unibox, approve drafts, and call a winner — by name, no glue code, no scraping the dashboard.
▸ "Spin up a campaign for the leads in mercer.csv. Two steps, 3 days apart." numail.lead.import({ file: "mercer.csv", map: "auto" }) → 1,204 leads imported · 3 dupes skipped numail.campaign.create({ name: "Mercer · Q3 outbound", steps: [{ delay_days: 0, … }, { delay_days: 3, … }] }) ✓ cmp_7d2 created · draft ▸ "Connect tomas@mercer.com as the sending mailbox, then launch." numail.mailbox.connect({ provider: "google", email: "tomas@mercer.com" }) → returns OAuth URL · opened in browser · connected ✓ numail.campaign.launch("cmp_7d2") ✓ launched · 1,204 leads enrolled ▸ "Who replied positive today? Draft short responses." numail.unibox.list({ filter: "positive", since: "24h" }) → 6 threads · drafting… numail.unibox.draft(thr_2c1, { length: "short" }) ✓ 6 drafts ready for your approval
@numail/mcp is a standard stdio MCP server. If your client speaks MCP, it works — here are the ones our customers wire up most.
Same npx @numail/mcp command everywhere — only the config file path differs. Custom agent runtime? It's a plain stdio server you can launch from any process.
No Python, no Docker, no Node version dance — npx pulls the right version on first run. Mac, Windows, Linux.
In NuMail · Settings · API Keys, create a key and scope it to the workspaces this agent may touch. Read tools work read-only; write tools need an explicit scope.
Drop this into your client's MCP config (Claude Code .mcp.json shown — Cursor, Codex, Windsurf, Zed use the same shape).
Reload the client — the NuMail tools register automatically. Then just ask in plain language.
One tool per capability, mapped one-to-one to the NuMail REST API. Names are stable and self-describing, so the agent picks the right one without prompting.
Four workflows that turn into a single sentence once the MCP server is connected.
Import the CSV, clone your standard sequence, connect the sending mailbox, and launch — the agent chains lead.import → campaign.duplicate → mailbox.connect → campaign.launch.
Read every positive reply since yesterday, grouped by campaign, and have a short draft waiting on each one. Approve the good ones in a single follow-up.
Friday at 4pm: pause every active campaign across every workspace and schedule the resume for Tuesday 9am — campaign.pause with an auto-resume timestamp.
Pull variant stats, declare the significant winner, and roll the losing variant's remaining sends onto it — ab.variant_stats → ab.promote.
The NuMail REST API is live and stable, and @numail/mcp is the thin MCP layer over it — each tool above is a 1:1 wrapper around a documented endpoint. The package is rolling out to early-access workspaces now.
Want it the moment it ships? Every capability here already works over the REST API and SDKs today — start there and your agent loses nothing in the switch. Start a trial and ask us to flag your workspace for MCP early access.
One config block. npx -y @numail/mcp in the agent you already use.