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, with 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 and 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.