MCP7 min read

Test deliverability from inside Cursor

You're editing a transactional email template in Cursor. Instead of alt-tabbing to a tool, you ask Cursor: "test this template's deliverability". The MCP integration makes that one-shot.

Cursor is where a lot of email templates actually get written — React Email components, MJML files, raw HTML. The friction today is that once a template feels done you leave the IDE, open a deliverability tool, paste the compiled HTML, wait, screenshot, come back, edit, repeat. With Cursor's MCP support and our server the loop collapses into a single prompt: "test this template's deliverability and tell me what to fix". Here is the setup.

You will need

Cursor (current stable — MCP shipped in late 2024), Node.js 20+, and an Inbox Check API key (ic_live_...) from the dashboard. Five minutes, one config file.

Cursor's MCP support in 2026

Cursor has had first-class MCP support since v0.45. Two surfaces use it:

  • Agent mode — the autonomous "do this task" surface that can call tools, edit files and run commands. MCP tools show up as regular callable capabilities alongside Cursor's built-in file ops.
  • Ask mode — the chat panel. MCP tools work here too, via @server-name mentions or by the model picking them implicitly.

Both surfaces read the same MCP config. You set it up once; it works everywhere.

Adding Inbox Check MCP to Cursor

Cursor supports two scopes for MCP: global (applies everywhere) and project (only when that repo is open). For deliverability I recommend project scope — it keeps the API key in your workspace's env, and different clients can use different keys.

Project scope: .cursor/mcp.json

Create .cursor/mcp.json at the repo root:

{
  "mcpServers": {
    "inbox-check": {
      "command": "npx",
      "args": ["-y", "ldm-inbox-check-mcp"],
      "env": {
        "INBOX_CHECK_API_KEY": "ic_live_REPLACE_ME"
      }
    }
  }
}

Add .cursor/mcp.json to your .gitignore if the API key is in there directly. Better yet, reference an env var:

{
  "mcpServers": {
    "inbox-check": {
      "command": "npx",
      "args": ["-y", "ldm-inbox-check-mcp"],
      "env": {
        "INBOX_CHECK_API_KEY": "${env:INBOX_CHECK_API_KEY}"
      }
    }
  }
}

Cursor expands ${env:VAR} from your shell environment — set INBOX_CHECK_API_KEY in your.zshrc or .bashrc and the config file stays safe to commit.

Global scope (alternative)

Open Cursor Settings → MCP → Add new MCP server. Fill in:

Name:    inbox-check
Command: npx
Args:    -y ldm-inbox-check-mcp
Env:     INBOX_CHECK_API_KEY=ic_live_...

Click save. Restart Cursor. The status dot next to the server name should turn green after a few seconds — that means the server started and successfully returned its tools/list.

Agent mode vs ask mode

Both modes can call the MCP tools; the difference is in how much autonomy you grant.

Ask mode

Chat-style. You ask, the agent proposes tool calls, you approve each one. Best for: exploring, reading a verdict, deciding what to fix.

Agent mode

The agent plans, executes and iterates. Best for: "edit the template until inbox rate is above 90%". With tool-use auto-approval enabled the agent can run a test, edit the HTML, re-run the test, and repeat — all without your intervention.

Auto-approve placement tests only

Cursor lets you whitelist specific tools for auto-approval. For Inbox Check, a reasonable default is to auto-approve get_test, check_auth, check_blacklist, list_providers (all read-only) and ask for permission on start_test (it consumes your quota). Configure in Settings → MCP → Tool approvals.

Example workflow: edit template, test, fix, retest

You're editing emails/welcome.tsx — a React Email component that compiles to HTML. Workflow:

  1. Run your template build script in the terminal. The HTML lands in dist/welcome.html.
  2. Open Cursor agent mode. Prompt: "read dist/welcome.html, run an Inbox Check placement test for it from hello@myco.com, wait for the verdict, and tell me the top three things to change".
  3. Agent reads the file, calls start_test, polls get_test, summarises: "2/20 went to Outlook spam; SpamAssassin triggered HTML_IMAGE_ONLY_32; DKIM passes but DMARC alignment fails".
  4. Ask: "fix the React Email component to have a 60/40 text-to-image ratio and a proper plain-text fallback". Cursor edits emails/welcome.tsx, rebuilds, reruns the test.
  5. When the verdict is green enough, commit.

Prompts that work best

Cursor's agent is particularly good at multi-step reasoning when you write the goal, not the steps. Good prompts for this MCP:

  • "Read templates/onboarding.html, run a placement test from welcome@myco.com, and open a file .claude/deliverability-report.md with the top-five issues sorted by severity."
  • "Check SPF/DKIM/DMARC for every domain I send from (see config/senders.json) and tell me which ones need DMARC tightened."
  • "Run a placement test for the HTML in out/marketing.html. If inbox rate is under 85%, iterate on the template until it's above 90%. Stop after three iterations."
  • "Is our sending IP (203.0.113.45) on any blacklist? If so, write a remediation plan to docs/ip-delist.md."

Cursor vs Claude Desktop for this workflow

Both speak MCP; the tools are the same. The difference is context.

  • Claude Desktop — best for ad-hoc debugging, pasting a template in, asking questions. No project awareness. No file editing.
  • Cursor — best when the template lives in a repo and you want the agent to read it, test it, fix it, and commit. Project awareness is the differentiator.

For one-off checks use Claude Desktop. For iteration on an actual codebase, Cursor is the better fit.

Frequently asked questions

Does the MCP server work with Cursor background agents?

Yes. Cursor's background agent mode can call MCP tools on your behalf. Useful for a nightly "check every sender domain for DMARC drift" task.

Can the agent create Cloudflare DNS records directly?

Not via the Inbox Check MCP server — it only reads. For writes, add a Cloudflare MCP server to your config; Cursor can chain "check_auth finds SPF missing" with "create TXT record" in the same agent turn.

How do I keep the API key out of my repo?

Use the env-variable interpolation pattern (${env:INBOX_CHECK_API_KEY}) in .cursor/mcp.json and set the actual value in your shell rc or a gitignored .env.

Does every teammate need their own API key?

Strongly recommended. API keys are tied to quota and to audit logs. One key per developer makes rate limits predictable and makes it obvious whose agent ran a test.
Related reading

Check your deliverability across 20+ providers

Gmail, Outlook, Yahoo, Mail.ru, Yandex, GMX, ProtonMail and more. Real inbox screenshots, SPF/DKIM/DMARC, spam engine verdicts. Free, no signup.

Run Free Test →

Unlimited tests · 20+ seed mailboxes · Live results · No account required